Django 模型创建共同独特的领域

Posted

技术标签:

【中文标题】Django 模型创建共同独特的领域【英文标题】:Django model creation jointly unique fields 【发布时间】:2013-02-10 11:14:22 【问题描述】:

我正在尝试为 Django 创建一个如下所示的模型:

class Device(Model):
    UDID = CharField(length=64, primary_key=True)
    # more irrelevant stuff

class DeviceProperty(Model):
    device = ForeignKey(Device)
    name = CharField(length=255)
    value = CharField(length=255)
    readOnly = BooleanField()

但是,出于数据完整性的原因,单个设备不应有两个具有相同名称的属性。所以我需要使 DeviceProperty 的设备和名称字段共同唯一。

实现此目的的一种简单方法是在两个字段上使用复合主键,但这会引发一些问题,更重要的是 Django 不支持。

我在 Django 文档中没有找到任何关于此的内容。我错过了什么吗?

【问题讨论】:

unique=True 不允许我拥有两个共同唯一的字段(请记住,设备和名称字段都不应该是唯一的,独立获取),我看不出 OnetoOneField 有什么帮助 是的,但是一个设备有很多属性,所以 OnetoOneField 绝对不是那样的。不过非常感谢! OneToOne 适用于您确实希望 ONE 对象与其他对象完全匹配的情况。他希望 ONE 对象有多个其他匹配对象,但希望确保这些匹配对象不共享相同的“名称”值。 【参考方案1】:

unique_together 是你想要的。

class DeviceProperty(Model):
    …
    class Meta:
        unique_together = ['device', 'name']

【讨论】:

确实是我需要的。谢谢!

以上是关于Django 模型创建共同独特的领域的主要内容,如果未能解决你的问题,请参考以下文章

markdown Django时区模型领域

Adlik和Paddle达成合作意向,共同推进深度学习技术在通信领域落地

Keycloak - 是不是可以在领域之间共享一组共同的用户?

猫鼬和独特的领域

猫鼬和独特的领域

makemigrations 忽略所有领域 (DJANGO)