2013-02-25 49 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