2013-04-06 66 views
0

我想要驗證的包含一個可選的FK的一種形式:可選ForeignKey的

class Address(models.Model): 
    mandatory_field = models.CharField(max_length=100) 
    optional_field = models.CharField(max_length=20, blank=True, null=True) 
class Show(models.Model): 
    name = models.CharField(max_length=100) 
    optional_address = models.ForeignKey(Address, blank=True, null=True) 

class AddressForm(forms.ModelForm): 
    class Meta: 
     model = Address 

class ShowForm(forms.ModelForm): 
    class Meta: 
     model = Show 

在視圖形式,我想以執行這樣的驗證:

if request.method == 'POST': 
    form = ShowForm(request.POST) 
    if form.is_valid(): 
     do anything... 

但我不知道如何驗證AddressForm。如果填寫了至少一個地址字段,則應該進行驗證。由於AddressForm有一個必填字段,因此我無法每次驗證它。

您是否有想過在展示表單的驗證中包含驗證地址?

謝謝 朱利安

回答

0

如果我理解正確的話,你需要做場「optional_address」強制性的,如果至少有1個地址的實例

class ShowForm(forms.ModelForm): 
    class Meta: 
     model = Show 

    def __init__(self, *args, **kwargs): 
     super(ShowForm, self).__init__(*args, **kwargs) 
     if Address.objects.exists(): 
      self.fields['optional_address'].required = True 
+0

謝謝TigorC的回答。實際上我想驗證ShowForm中的AddressForm。爲此,只有在填入了mandatory_field或optional_field的情況下,我才需要檢查AddressForm。然後,我想通過只執行一個form.save()來保存地址和顯示。我認爲這可以通過重寫驗證方法和保存方法來處理,但我不確定處理這種情況的最佳方式。 – Julio 2013-04-08 06:53:29