I wrote 3 models:

...
def generate_mugshot(instance, filename):
    filename, ext = os.path.splitext(filename)
    return "mugshot/%s/%s%s" % (instance.id, uuid4(), ext)

def generate_team_photo(instance, filename):
    filename, ext = os.path.splitext(filename)
    return "team/%s/%s%s" % (instance.id, uuid4(), ext)

def generate_gift_photo(instance, filename):
    filename, ext = os.path.splitext(filename)
    return "gift/%s/%s%s" % (instance.id, uuid4(), ext)


class User(AbstractUser):
    ...
    mugshot = models.ImageField('头像', upload_to= generate_mugshot, 
validators=[check_image_extension], null=True, blank=True)

class Team(models.Model):
    ...
    photo = models.ImageField('队标', upload_to= generate_team_photo, 
validators=[check_image_extension], blank=True, null=True)

class Gift(models.Model):
    ...
    photo = models.ImageField('图片', upload_to= generate_gift_photo, 
validators=[check_image_extension], null=True, blank=True)

If I want to add a new model, I have to write a new duplicate function 
"generate_something(instance, filename)", it is not pythonic. So I modify 
it to following code:

def generate_attachment_by_id(prefix):
    def _return_function(instance, filename):
        filename, ext = os.path.splitext(filename)
        return "%s/%s/%s%s" % (prefix, instance.id, uuid4(), ext)
    return _return_function

...

class User(AbstractUser):
    mugshot = models.ImageField('头像', upload_to=generate_attachment_by_id(
'mugshot'), validators=[check_image_extension], null=True, blank=True)

class Team(models.Model):
    photo = models.ImageField('队标', upload_to=generate_attachment_by_id(
'team'), validators=[check_image_extension], blank=True, null=True)

class Gift(models.Model):
    photo = models.ImageField('图片', upload_to=generate_attachment_by_id(
'gift'), validators=[check_image_extension], null=True, blank=True)

Then I execute makemigrations, an error raised:

ValueError: Could not find function _return_function in app.account.models.
Please note that due to Python 2 limitations, you cannot serialize unbound 
method functions (e.g. a method declared and used in the same class body). 
Please move the function into the main module body to use migrations.
For more information, see 
https://docs.djangoproject.com/en/1.10/topics/migrations/#serializing-values


So, how to solve the problem?

Thank you for helping me...

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/e11aa79e-a103-4b5e-8420-371599d4a7eb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to