向django中的多对多字段添加唯一键
我有以下型号向django中的多对多字段添加唯一键,django,django-models,Django,Django Models,我有以下型号 class SettingAttributes(Core): attribute_name = models.CharField(max_length=100) description = models.CharField(max_length=100) setting_type = models.CharField(max_length=10, choices=SETTING_TYPES) class Meta: app_labe
class SettingAttributes(Core):
attribute_name = models.CharField(max_length=100)
description = models.CharField(max_length=100)
setting_type = models.CharField(max_length=10, choices=SETTING_TYPES)
class Meta:
app_label = 'core'
及
我想在
SettingAttrValue
和User
上同时添加unique\u
。如果我在第二个模型的meta类中这样做,django会给我这样的错误,例如“unique\u-together”指的是多个域的“user”,但“unique\u-together”中不允许有多个域。将unique\u-together
添加到模型中:
是的,就像我在回答中所说的。数据库表将以任何一种方式创建,添加类只是应用唯一约束的抽象。从技术上讲,
UserSettingAttrValue
不是传统意义上的对象,但说它知道哪个SettingAttrValue
正在使用它,仍然让人感到奇怪,似乎SettingAttrValue
应该强制唯一性。这里编写的代码读起来像“条目知道它在哪个列表中”,而通常列表会管理对象成员身份,条目不知道它是哪个列表的一部分。我想除了放弃ManyToManyField
并将SettingAttrValue
设置成一个ForeignKey
到另一个型号之外,没有更好的方法了。
class SettingAttrValue(Core):
attribute_value = models.CharField(max_length=200)
attribute_type = models.CharField(max_length=200)
attribute = models.ForeignKey(SettingAttributes)
user = models.ManyToManyField(User)
avaliases = models.TextField()
attriblob = models.BinaryField(default=None, blank=True, null=True)
class Meta:
app_label = 'core'
class SettingAttrValue(Core):
attribute_value = models.CharField(max_length=200)
attribute_type = models.CharField(max_length=200)
attribute = models.ForeignKey(SettingAttributes)
user = models.ManyToManyField(User, through='UserSettingAttrValue')
avaliases = models.TextField()
attriblob = models.BinaryField(default=None, blank=True, null=True)
class Meta:
app_label = 'core'
class UserSettingAttrValue(models.Model):
setting_attr_value = models.ForeignKey(SettingAttrValue)
user = models.ForeignKey(User)
class Meta:
unique_together = ('setting_attr_value', 'user')