我有一个模型OrderPage
与Site
有很多联系。在Django管理员中,我想限制站点的选择(属于现有Site
的{{1}} s不能再次选择)。我可以用OrderPage
吗?我在使用以下模型unique_together
ManyToManyFields are not supported in unique_together
答案 0 :(得分:1)
如果Site
只能有一个OrderPage
,则不必担心unique_together。
理想情况下,您应该继承Site
的子类,然后使用其中的ForeignKey
到OrderPage
。这将自然地为您提供所需的内容:每个站点都可以有一个OrderPage,而每个OrderPage可以有多个站点。这将是最干净的方法,但是您必须在整个程序中使用子类来代替原始的Site
,这可能比您现在想要的工作还要多。
class BetterSite(Site):
order_page = models.ForeignKey('OrderPage')
更脏的方法是保留M2M并仅将site
设置为唯一,因为M2M表中的每个站点上都应该只有一个条目。您将使用“通过”表,以便设置自定义唯一性值:
class OrderPage(models.Model):
description = models.CharField(max_length=255, blank=False)
sites = models.ManyToManyField(Site, through='OrderPageToSite')
class OrderPageToSite(models.Model):
order_page = models.ForeignKey(OrderPage)
site = models.ForeignKey(Site, unique=True)
(请注意,我已经将这些简单了,但是在FK字段中,您还应该考虑设置on_delete
和related_name
)