2014-03-05 2 views
4

이 사용자의 사진을위한 모델이다 가정 지금가의 ContentType에 대한 혼란

class Status(models.Model): 
     user = models.ForeignKey(User) 
    tweet = models.TextFied() 
    pub_date = models.DateTimeFied(auto_now=True, auto_now_add=pub_date) 

는, 이것은 모든 피드위한 모델이다 사용자 : 위에서

class StreamItem(models.Model): 
    user = models.ForeignKey(User) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type','object_id') 
  1. StreamItem, content_type이 인스턴스의 data_type이 되나요?

  2. object_id은 무엇입니까? 해당 StreamItem 인스턴스에 대한 content_type 인스턴스의 pk 또는 pk입니까?

  3. content_type 인스턴스 (사진 및 상태)의 pub_date을 어떻게 가져 와서 StreamItem 인스턴스로 초기화합니까?

  4. 마지막으로 어떻게 템플릿에서 렌더링합니까? 나는 그것이 텍스트인지 이미지인지 알지 못하기 때문에.

감사합니다.

+2

, 당신이 더 읽기 [contenttypes 프레임 워크 (https://docs.djangoproject.com/en/1.4/ref/contrib/contenttypes) – FallenAngel

답변

1

이 정말 빠른 대답은 :

1) 콘텐츠 _가, 객체 유형 귀하의 경우 (사진 또는 상태)가 될 작품을하는 방법에 대한 자세한 내용은 Django contenttypes framework을 볼 수 있습니다.

2) OBJECT_ID

stream_item.content_object.pub_date 

4) 나는 할 것이다 당신의 content_object 속성을 통해에 액세스, 일반의 속성에 액세스하려면 사진이나 상태

3)의 주요 열쇠가 될 것입니다 메서드로 렌더링 할 수 있습니다. 이것은 파이썬의 템플릿 시스템과 함께 사용될 수 있습니다. 메소드 이름을 인터페이스처럼 지정할 수 있습니다. 템플릿에서 사용하기에

class Status(models.Model): 
    ... 
    def render_widget(self): 
     return render_to_string('status_widget.html', {'status' : self }) 


class Photo(models.Model): 
    ... 
    def render_widget(self): 
     return '<span>My HTML Here</span>' 

: 기본에 대한

{% for item in stream_items %} 
    {{ item.content_object.render_widget }} 
{% endfor %}