2013-12-10 37 views
0

我想知道如何從查詢集中排除可編輯對象,並且如果我使用相同的表單創建對象,它仍然有效。django表單創建或編輯排除對象

我的形式:

class CountryForm(forms.ModelForm): 
    """Form to create or edit Countries.""" 

    name = forms.CharField() 
    flavor = forms.CharField(
    widget=forms.Textarea(attrs={'width': 300, 'height': 100})) 
    history = forms.CharField(
     widget=forms.Textarea(attrs={'width': 300, 'height': 100})) 
    likes_set = Country.objects.all().exclude(self) 
    likes = forms.ModelChoiceField(queryset=likes_set, empty_label="Country it likes" 

    class Meta: 
     model = Country 

回答

1

你需要做的這__init__()方法,如果可用也通過instance變量在實例的形式。

class CountryForm(forms.ModelForm): 
    """Form to create or edit Countries.""" 

    name = forms.CharField() 
    flavor = forms.CharField(
    widget=forms.Textarea(attrs={'width': 300, 'height': 100})) 
    history = forms.CharField(
     widget=forms.Textarea(attrs={'width': 300, 'height': 100})) 
    likes = forms.ModelChoiceField(queryset=Country.objects.all(), empty_label="Country it likes" 

    class Meta: 
     model = Country 

    def __init__(self, *args, **kwargs): 
     super(CountryForm, self).__init__(*args, **kwargs) 
     if 'instance' in kwargs: 
      self.fields['likes'].queryset = Country.objects.exclude(kwargs['instance']) 

鑑於你必須創建形式

myform = CountryForm(instance=country_obj) 

myform = CountryForm(request.POST, instance=country_obj) 
+0

感謝我去嘗試了這一點,並深入探討了__init__從來沒有完全得到了:( –

+0

我想想我對此的想法,我唯一不知道的是,這是如何創建一個新的國家,我應該只是做一個空的對象,並通過它? –

+0

@HansdeJong,當你重新創建新的對象,不要傳遞'instance'變量。在這種情況下,'likes'將列出所有對象。 – Rohan