2015-06-19 26 views
3

我試圖創建一個必須滿足的條件,才能將對象保存到數據庫。我有表A和表B,A與B有2個單獨的多對多關係。我試圖檢查這些字段作爲集處理的條件在保存條目之前是否是不相交的保留。檢查選定的多對多關係字段是否脫節

下面是一些代碼:

class Foo(models.Model): 
    first = models.ManyToManyField(Bar, related_name='first') 
    second = models.ManyToManyField(Bar, related_name='second') 
    def save(self): 
    if (set(self.first.all()).isdisjoint(list(self.second.all()))): 
     #save 
    else: 
     #raise exception 

但我發現了錯誤

「<富:無>」 需要有場 「foo」 的值在此之前多到可以使用多種關係。

我猜它希望它在我做這個比較之前被保存,但是在這個條件成立之前,整個問題並不是保存到數據庫。如何正確地做到這一點?

回答

1

模型save方法無法訪問m2m相關字段,因爲它在它們之前被調用。如果你想驗證他們,那麼你應該爲你的FooAdmin類定義一個自定義模型表單(我想你使用的是django admin)並在那裏進行驗證。

class FooForm(forms.ModelForm): 
    class Meta: 
     model = Foo 
     exclude =() 

    def clean(): 
     cd = self.cleaned_data 
     first_objects = cd['first'] 
     second_objects = cd['second'] 
     # your logic 
     return super(FooForm, self).clean() 


class FooAdmin(admin.ModelAdmin): 
    form = FooForm