我正在努力使以下适合Django ORM.拥有Publish
管理不同类型内容(其他模型)的出版物的模型.这样我就可以轻松地Publish.objects.all()
按日期订购.我制作了一个通用模型如下:
class Publish(models.Model):
""" Intermediary model for displaying and managing different types of content """
status = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=1)
publish = models.DateTimeField(_('publish'), default=datetime.datetime.now)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
Run Code Online (Sandbox Code Playgroud)
问题是我想将它附加到不同的模型.这必须是一种OneToMany
关系.因为一篇文章只能有一个出版日期.据我所知,一般关系是一种ManyToMany
关系.
我试过在admin.py中限制max_num
和extra
in GenericTabularInline
,但这不是一个很好的工作解决方案.有谁知道如何将发布模型附加到几个不同的模型,使其成为一个必需的,一对多的关系?许多是Publish模型,一个是ex.一篇文章.
你的假设是不正确的 - 通用外键是一对多,而不是多对多.您可以看到您的模型具有content_object
和object_id
字段 - 即此Publish实例链接到单个目标对象,尽管该对象可以有许多Publish实例.
你真正想要的是OneToOne模型.您可以使用您拥有的模型模拟它,您可以简单地限制发布对象的创建,以便每个目标对象只能有一个.您可以通过设置做到这一点unique_together
上content_type
,并object_id
在Meta子类.
class Publish(models.Model):
... fields ...
class Meta:
unique_together('content_type', 'object_id')
Run Code Online (Sandbox Code Playgroud)
您可能要考虑的另一个选项是尝试多表模型继承,而不是使用泛型关系,其中每个对象都继承自Publish.
归档时间: |
|
查看次数: |
1916 次 |
最近记录: |