2011-06-15 67 views
1

我想为用户提供默认配置文件图片。我使用了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) 
    ... 

我试着添加以下功能到用户配置模型(以及更可能的,不正确的代码) -

# 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() 

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

回答

1

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

7

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="..."/> 
相关问题