向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')