Django的模型创建联合独特的领域
问题描述:
我试图创造一个Django的模型,看起来像这样: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_together是你想要的。
class DeviceProperty(Model):
…
class Meta:
unique_together = ['device', 'name']
+0
确实看起来像我需要的东西。谢谢! – Habfast 2013-02-25 10:36:22
+0
太棒了。乐于帮助! – 2013-02-25 10:38:20
独特=真不会让我有两个领域共同的独特(记住,既没有设备也没有名称字段应该是唯一的,独立存在时),我没有看到OnetoOneField如何帮助 – Habfast 2013-02-25 10:33:17
是啊,但设备有很多属性,所以OnetoOneField肯定不是这样。但非常感谢! – Habfast 2013-02-25 10:44:46
OneToOne适用于您实际上希望ONE对象具有完全一个匹配其他对象的情况。他希望ONE对象具有多个其他匹配对象,但希望确保这些匹配对象不共享相同的“名称”值。 – 2013-02-25 10:47:49