django - 如果为空,请提供默认个人资料图片

我想为用户提供默认个人资料图片。我在 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()

谁能告诉我如何为个人资料创建真实的默认图片。谢谢。

最佳答案

Ignacio 的回答很简单,但并不完美。它打破了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="..."/>

https://stackoverflow.com/questions/6351636/

相关文章:

java - 如何根据元素的一个字段的值对java中的链表进行排序?

sql - 是什么导致了这种奇怪的 SQL 行为?

perl - 为 LWP::UserAgent 设置参数时出现问题

ruby-on-rails - ruby rails : How can I add a css f

function - 为什么 Matlab 看不到我的函数?

f# - 将字典键添加到 F# 中的构造函数

objective-c - [pool release] 和 [pool drain] 有什么区别?

amazon-ec2 - 使用pscp自动接受rsa指纹

ruby-on-rails-3 - Rails 3 在不注销的情况下设计更新密码

django - 将 Django 模型/表拆分为两个模型/表是否有性能优势?