2010-12-20 85 views
0
class Service(models.Model) 
name = models.CharField("service name", max_length = 20, unique = True) 


class Newclass(models.Model): 
service = models.ForeignKey(Services) 
user1 = models.ForeignKey(User) 

基本上我想要的是: 對於每個服務我可以有不同的user1,但沒有重複的user1任何服務。 例如Django的外鍵問題,

service = 'some' user1 = 'amit' 
service = 'some' user1 = 'laspal' 
service = 'some1' user1 = 'amit' 

那麼如何避免這種情況:

service = 'some' user1 = 'amit' 
    service = 'some' user1 = 'amit' 

我應該檢查,同時增加用戶1的NewClass或者是有一些領域我,我可以用FK用戶()失蹤了。

感謝。

回答

2

你想unique_together

class Newclass(models.Model): 
    service = models.ForeignKey(Services) 
    user1 = models.ForeignKey(User) 

    class Meta: 
    unique_together = ('service', 'user1') 

unique_together做(從the documentation)什麼:

這是當一起考慮必須是唯一的字段列表的列表。它用於Django管理員,並在數據庫級別執行(即CREATE TABLE語句中包含適當的UNIQUE語句)。

3

如果你的意思是你不想要的2個Newclass模型可以用相同的服務和USER1存在,你應該使用:

class Newclass(models.Model): 
    service = models.ForeignKey(Services) 
    user1 = models.ForeignKey(User) 

    class Meta: 
    unique_together = (('service', 'user1'),) 
+0

+1 - 只注意到我的'unique_together'從句的語法是錯誤的,你的是正確的(它是一個元組的元組,而不僅僅是一個元組)。 – 2010-12-20 12:09:54

+2

不正確,這也是正確的,對於這種情況可能會更好:@http://docs.djangoproject.com/en/dev/ref/models/options/'爲了方便,unique_together可以是一個單獨的列表,當處理一個唯一套領域' – 2010-12-20 12:33:20