2016-11-13 2 views
0

Ich möchte Art von Profilen mit Standard-Avatare erstellen.Standard-Bild-Avatar je nach Geschlecht

GENDER_CHOICES = (
    ('M', 'Male'), 
    ('F', 'Female'), 
) 

class Someone(models.Model): 
    name = models.CharField(max_length=120) 
    gender = models.Charfield(max_length=1, choices=GENDER_CHOICES) 
    image = models.ImageField(upload_to='avatars', default=someone_avatar) 

Ich versuche eine Funktion zu schreiben, die den Pfad zu meinem Ordner mit jpg zurückgibt.

def someone_avatar(instance): 
    gender = instance.gender 
    if gender == 'Male': 
     avatar = 'avatars/m.jpg' 
    else: 
     avatar = 'avatars/f.jpg' 
    return avatar 

Offensichtlich funktioniert es nicht, also könnten Sie mir einige Ratschläge geben, wie man es löst? Vielleicht sollte ich die Speichermethode überschreiben? Thx.

Ok Herausgegeben ich mit post_save versucht, aber es umfaßt nicht so gut funktionieren:

def set_avatar(instance): 
    avatar = instance.image 
    gender = instance.gender 
    if gender == 'Male': 
     avatar = 'persons/m.jpg' 
    else: 
     avatar = 'persons/f.jpg' 
    return avatar 

def post_save_avatar(sender, instance, *args, **kwargs): 
    if not instance.image: 
     instance.image = set_avatar(instance) 
post_save.connect(post_save_avatar, sender=Person) 

Vielleicht sollte ich nicht nur Avatar gesetzt wie Pfad-String?

Edit 2

Es funktioniert für pre_save.

+0

Ja, 'pre_save' ist sowieso besser, da' post_save' machen würde und zusätzlich 'UPDATE'. –

Antwort

0

Scheint so, als ob Sie nach post_save signal suchen. Es gibt Ihnen created Flagge. Sie können also Ihr gewünschtes Bild in Ihrem Handler manuell setzen, wenn created True ist.