2014-11-04 122 views
0

我有一個布爾領域的典範和外鍵組合兩個領域的ModelForm在Django

class ModelA(models.Model): 
    is_anonymous = BooleanField(default=False) 
    page = ForeignKey(ModelB, null=True) 

我想這兩個領域在選擇字段組合。

它應該有一個選項<option value="anonymous">Anonymous</option>ModelB中的每個對象的選項。

因此,如果一個頁面在<select>選定字段is_anonymous應該是假的,如果選擇了匿名領域page應該是空,is_anonymous應該是真實的。

我想我必須將查詢集ModelB.objects.all()添加到選擇列表中

self.fields['field_name'].widget = forms.Select(choices=[(False, "Not anonymous"), (True, "Anonymous"),]) 

但它將結果保存到外地field_name這是錯誤的。

回答

0

這裏沒有必要組合字段。您可以將外鍵字段的empty_value設置爲'anonymous',並在clean方法中處理它。

class ModelAForm(forms.ModelForm): 
    page = forms.ModelChoiceField(queryset=ModelB.objects.all(), empty_value="Anonymous") 

    class Meta: 
     model = ModelB 

    def clean(self): 
     if not self.cleaned_data['page']: 
      self.cleaned_data['anonymous'] = True 
+0

這是一個很好的解決方案。問題是我需要另一種選擇。選項將是'[「匿名」,「我的用戶名」,(模型b對象)'。只有選擇匿名,匿名字段才應該是真實的。它可以通過'ModelChoiceField'完成嗎? – Jamgreen 2014-11-04 18:18:33