Dav*_*542 1 django django-models
我想为用户提供默认的个人资料图片.我已经使用了默认功能ImageField,但它更像是'初始'而不是默认功能.我已经阅读了这个问题的答案:Django的ORM中的ImageField的默认图像,但我想在模型级别解决问题,而不是用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)
...
Run Code Online (Sandbox Code Playgroud)
我已经尝试将以下函数添加到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()
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何为个人资料创建一个真正的默认图片.谢谢.
伊格纳西奥的答案很简单,但并不完美.它打破了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
Run Code Online (Sandbox Code Playgroud)
然后在模板中你只需:
<img src="{{ item.avatar_image_url }}" alt="..."/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3153 次 |
| 最近记录: |