gpt4 book ai didi

django - 我可以在 ManyToMany 字段上使用 unique_together 吗?

转载 作者:行者123 更新时间:2023-12-02 00:28:21 25 4
gpt4 key购买 nike

我有一个模型 OrderPage,它是 Site 的 manytomany。在 Django admin 中,我想限制站点的选择(不能再次选择属于现有 OrderPageSite)。我可以用 unique_together 来做吗?我收到以下模型的错误 ManyToManyFields are not supported in unique_together

class OrderPage(models.Model):

description = models.CharField(max_length=255, blank=False)
sites = models.ManyToManyField(Site)

class Meta:
unique_together = (('id', 'sites'),)


class Order(models.Model):
order_page = models.ForeignKey(OrderPage)


class OrderPageAdmin(admin.ModelAdmin):
filter_horizontal = ('sites',)

admin.site.register(OrderPage, OrderPageAdmin)

最佳答案

如果一个Site 只能有一个OrderPage,那么就不用担心unique_together。

理想情况下,您应该将 Site 子类化,并使用 ForeignKey 从它到 OrderPage。这自然会为您提供您正在寻找的东西:每个站点都可以有一个 OrderPage,每个 OrderPage 可以有多个站点。这将是最干净的,但是您必须在整个程序中使用您的子类来代替原始的 Site,这可能比您现在想要的要多。

class BetterSite(Site):
order_page = models.ForeignKey('OrderPage')

更肮脏的方法是保留您的 M2M 并将 站点 设置为唯一,因为 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_deleterelated_name)

关于django - 我可以在 ManyToMany 字段上使用 unique_together 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52867051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com