如果空的话,提供默认的个人资料图片

时间:2011-06-15 00:11:04

标签: django django-models

我想为用户提供默认的个人资料图片。我使用了ImageField上的默认功能,但它更像是“初始”而不是默认功能。我已经阅读了这个问题的答案:Default image for ImageField in Django's ORM,但我想在模型级解决问题,而不是FK关系。

以下是我目前的情况:

class Avatar(models.Model):
    avatar = models.ImageField(upload_to=upload_to)
    avatar_thumbnail = models.ImageField(upload_to=upload_to)
    profile = models.ForeignKey(UserProfile)

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    ...

我尝试将以下函数添加到UserProfile模型中(并且可能更多,代码不正确) -

 # in UserProfile(models.Model) 
   def create_default_avatar(self):
       if not self.avatar_set.all():
          avatar = profile.avatar_set.create(profile=self.__class__)
          avatar.avatar = File(open('media/default_profile_picture.jpg'))
          avatar.avatar_thumbnail = File(open('media/default_profile_picture_thumbnail.jpg'))
          avatar.save()

有人可以告诉我如何为个人资料创建真正的默认图片。谢谢。

2 个答案:

答案 0 :(得分:9)

伊格纳西奥的回答很简单,但并不完美。它打破了DRY原则。您必须在{% if image %}语句中添加所有模板。我建议在模型上创建一个属性,它将为你处理(在所有地方一次)。

class Avatar(models.Model):
    (...)

    @property
    def avatar_image_url(self):
        # Pseudocode:
        if has image:
            return url to the image
        else:
            return url to default image

然后在模板中你做:

<img src="{{ item.avatar_image_url }}" alt="..."/>

答案 1 :(得分:1)

如果要使用默认值,则不在字段中存储任何内容,并使用{% if %}模板标记来检测此内容。