1

상황을 모델링하고 싶습니다. 문제를 해결하는 데 어려움이 있습니다. 도메인은 다음과 같습니다. 게시물이 있으며 모든 게시물은 MediaContent와 일대일로 연결되어야합니다. MediaContent는 그림이나 비디오 일 수 있습니다 (현재는 나중에 음악 일 수 있습니다). 그래서, 내가 무슨입니다장고의 일반적인 취급 문제 처리

mediacontents/models.py

class MediaContent(models.Model): 
    uploader = models.ForeignKey(User) 
    title = models.CharField(max_length=100) 
    created = models.DateTimeField(auto_now_add=True) 

    def draw_item(self): 
     pass 

    class Meta: 
     abstract = True 

class Picture(MediaContent): 
    picture = models.ImageField(upload_to='pictures') 

class Video(MediaContent): 
    identifier = models.CharField(max_length=30) #youtube id 

게시물/models.py 내가 결국 같은 메소드를 호출 할 수 beeing는되고 싶지 무엇

class Post(models.Model): 
    ... 
    # link to MediaContent 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    media_content = generic.GenericForeignKey('content_type', 'object_id') 

:

post1.media_content.draw_item() 
>> <iframe src="youtube.com" ...> 
post2.media_content.draw_item() 
>> <img src="..."/> 

올바른 방법인가요? 작동합니까? 템플릿이 그 대상에 대해 불가지론 할 수 있습니까?

+0

문제가 없습니다. media_content 유형 (그림 또는 비디오)의 차이를 설명하도록 메소드를 정의하면 OK입니다. 전혀 어려워 보이지 않습니다. – JEEND0

답변

1

당신의 접근 방식이 나에게 좋을 것 같습니다. 그림 및 비디오 모델에서 draw_item 메서드를 재정의해야합니다. 템플릿이

{% for post in posts %} 
    {{ post.media_content.draw_item }} 
{% endfor %} 

처럼 보일 것이고, 한 그것은 draw_item 메소드가 정의하는 모델 일반적인 외래 키 포인트, 중요하지 않습니다.

+0

내 답변의 유효성을 확인해 주셔서 감사합니다 :) – fceruti