2013-02-25 100 views
2

我试图创造一个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文档中找到任何关于此的信息。我错过了什么?

+0

独特=真不会让我有两个领域共同的独特(记住,既没有设备也没有名称字段应该是唯一的,独立存在时),我没有看到OnetoOneField如何帮助 – Habfast 2013-02-25 10:33:17

+0

是啊,但设备有很多属性,所以OnetoOneField肯定不是这样。但非常感谢! – Habfast 2013-02-25 10:44:46

+0

OneToOne适用于您实际上希望ONE对象具有完全一个匹配其他对象的情况。他希望ONE对象具有多个其他匹配对象,但希望确保这些匹配对象不共享相同的“名称”值。 – 2013-02-25 10:47:49

回答

3

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