【问题标题】:Django model creation jointly unique fieldsDjango 模型创建共同独特的领域
【发布时间】: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 对象有多个其他匹配对象,但希望确保这些匹配对象不共享相同的“名称”值。

标签: python django django-models data-integrity


【解决方案1】:

unique_together 是你想要的。

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

【讨论】:

  • 确实是我需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多