繁体   English   中英

如何根据值确定Django模型的唯一性?

[英]How can I ensure uniqueness on a django model depending on the value?

标题可能有点误导,我本质上是想知道如何确保一种类型的属性的唯一性,而不是其他类型的属性。 如果我的模型“ MyModel”具有名为“ Settings”的相关模型,该模型为MyModel设置了某些属性,如何确保只有一个默认设置对象?

确保只有一个设置对象是默认设置的最佳方法是什么? 我可以说'default'和'related_model'是unique_together,但这也只允许一个非默认设置的对象。 我想说的是,我只能有一个默认设置对象,但对非默认对象没有限制。

MyModel
attribute1 = x
...
Settings
related_model = MyModel
default = boolean

嗯,我认为您不能在数据库级别进行设置。 但是您可以在“设置模型”中执行此操作。 假设您的MyModel模型在Settings模型”中具有关联。 像这样:

class Settings(models.Model):
    mymodel = models.ForeignKey(Settings, on_delete=models.DO_NOTHING, related_name="attributes")
    default = models.BooleanField(default=False)

然后在Settings模型中,可以在保存方法中添加如下约束:

from django.core.exceptions import ValidationError


class Settings(...):
    def save(self, *args, **kwargs):
        query = self.mymodel.attributes.all()
        if self.pk:
            query = query.exclude(pk=self.pk)

        if self.default == True:
           if query.filter(default=True).exists():
               raise ValidationError("Already a default value exists")
        return super(Attribute, self).save(*args, **kwargs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM