python - 在 django 中处理通用关系时遇到问题

标签 python django database-design django-models relational-database

我想对一种情况进行建模,但我在处理它时遇到了很大的麻烦。域是这样的:有帖子,每个帖子都必须与 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

posts/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')

我最终想做的是能够调用如下方法:

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

这是正确的方法吗?有效吗?模板可以不知道下面的对象吗?

最佳答案

我觉得你的方法不错。您只需要重写图片和视频模型中的draw_item方法。您的模板将类似于

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

通用外键指向哪个模型并不重要,只要它定义了 draw_item 方法即可。

关于python - 在 django 中处理通用关系时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890559/

相关文章:

python - 将 itertools.product 转换为列表时笛卡尔积内存错误

python - MagicMock @patch 没有按我的预期工作

python - Django:我如何判断RelatedManager 中所有对象的某个质量是否相同?

mysql - django 的数据库锁定问题

php - 向数据库插入不需要的数据

python - 将 python bool 值转换为 javascript bool 值的更简洁的方法是什么?

python - 我是一名 .NET 程序员。 Python 和/或 Ruby 的具体用途是什么可以提高我的工作效率?

python - 如何解决 Django TypeError - post() 参数 'slug' 有多个值?

mysql - 在mysql中导出表

mysql - 数据库设计 : name-value pairs - good or bad?