1

我想模擬一個情況,而且我很難處理它。該域名是這樣的:有帖子,每個帖子都必須與MediaContent一一對應。 MediaContent可以是圖片或視頻(現在可能是音樂)。所以,我有什麼是:在django中處理一般關係時遇到的問題

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

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

我最終想要做的,是beeing能夠調用的方法,如:

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

這是正確的方法嗎?模板可以不知道下面的對象嗎?

+0

我看不出有什麼問題。只要定義你的方法來說明media_content類型(圖片或視頻)的差異,你應該沒問題;似乎並不困難。 – JEEND0 2011-05-04 22:45:04

回答

1

你的方法對我來說很好。您只需要重寫圖片和視頻模型中的draw_item方法。您的模板看起來像

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

,它並不重要的模型一般國外關鍵點,只要它有一個draw_item方法定義。

+0

謝謝你驗證我的回答:) – fceruti 2011-05-05 01:25:26

相關問題