2016-11-13 7 views
0

デフォルトのアバターを使用して種類のプロファイルを作成したいと思います。デフォルトの画像アバター(性別による)

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) 

jpgを使用して自分のフォルダにパスを返す関数を作成しようとしています。

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

明らかに動作しないので、解決方法を教えてください。 保存方法を上書きする必要がありますか? Thx。

編集

[OK]を、私はpost_saveと試みたが、それは同様に機能does't:

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) 

は、たぶん私はちょうどパスのような文字列に設定されたアバターべきではないのですか?

編集2

これはpre_saveで動作しています。

+0

ええ、 'pre_save'はとにかく' post_save'が作成し、追加の 'UPDATE'を行うので、より良いです。 –

答えて

0

あなたはpost_save signalを探しているようです。それはあなたにcreatedフラグを与えます。したがって、createdがTrueの場合は、ハンドラで目的のイメージを手動で設定できます。

関連する問題