2011-06-15 6 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) 
    ... 

내가 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() 

누군가가 수 : 여기

내가 현재 가지고있는 것입니다 프로필의 실제 기본 그림을 만드는 방법을 보여주십시오. 고맙습니다.

답변

1

기본값을 사용하는 경우 필드에 아무것도 저장하지 말고 {% if %} 템플릿 태그를 사용하여이를 감지하십시오.

7

이그나시오의 대답은 간단하지만 완벽하지는 않습니다. 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="..."/> 
관련 문제