0

我有三個Django模型:Django的兩個外鍵唯一記錄

class Item(models.Model): 
    itemid = models.IntegerField(default=0, unique=True) 

class Region(models.Model): 
    regionid = models.IntegerField(default=0, unique=True) 

class Price(models.Model): 
    regionid = models.ForeignKey(Region) 
    itemid = models.ForeignKey(Item) 

現在我的問題是這樣的:

我需要的價格是對項目和區域組合(例如itemid的= 1獨特& regionid = a因此只能有一個價格可以具有itemid = 1和regionid = a的外鍵)。

有什麼辦法可以強制這種關係嗎?

回答

1

你應該unique together看一看!它可能會解決你的問題。

+0

這是正確的答案! – user590028

+0

所以我會在我的Price類的最後添加這樣的內容? class Meta: unique_together =(「regionid」,「itemid」)? – TangoAlee

+0

是的,這應該工作 – Alvaro

0

Django尚不支持複合索引。接受的解決方案是註冊一個post_syncdb信號處理程序 - https://docs.djangoproject.com/en/1.6/ref/signals/#post-syncdb

這裏是模板(你需要填寫相應的信息):

from django.db import connection 
from django.db.models.signals import post_syncdb 
def callback(sender, **kwargs): 
    cur = connection.cursor() 
    cur.execute('CREATE UNIQUE INDEX ...') 

post_syncdb.connect(callback, sender=app.models) 
+0

對不起,您將不得不手持我多一點。我對python和django很陌生 - 我已經閱讀過你提供的鏈接,但仍然沒有得到它。我會在哪裏放?我將如何字獨特的索引? – TangoAlee

+0

這是太多了...看看唯一在一起 – Alvaro

+1

我糾正 - 阿爾瓦羅是正確的。 Django現在有'獨特的一起'(看起來他們已經有一段時間了) – user590028