2016-11-06 104 views
-1

我的模型形式:更新形式不行

class MemberForm(ModelForm): 
    birth_date = forms.DateField(widget=forms.widgets.DateInput(format="%m/%d/%Y")) 
    class Meta: 
     model = Person 
     exclude =('user',) 

    def clean(self): 
     user = get_user(self.request) 
     name = self.cleaned_data.get('name') 
     birth_date = self.cleaned_data.get('birth_date') 
     if Person.objects.filter(user=user).exists(): 
      self.add_error('name', "You already submitted data") 
     elif Person.objects.filter(name=name, birth_date=birth_date).exists(): 
      self.add_error('name', "Person with this Name and Birth date already exists.") 
     return self.cleaned_data 

    def save(self, commit=True): 
     person = super().save(commit=False) 
     if not person.pk: 
      person.user = get_user(self.request) 
     if commit: 
      person.save() 
      self.save_m2m() 
     return person 

我的看法:

class PersonCreate(CreateView): 
    template_name = 'member/person_form.html' 
    model = Person 
    success_url = '/person/' 
    form_class = MemberForm 

    def get_form(self, form_class=None): 
     form = super().get_form(form_class) 
     form.request = self.request 
     return form 


class PersonUpdate(UpdateView): 
    template_name = 'member/person_form.html' 
    model = Person 
    success_url = '/person/' 
    form_class = MemberForm 

我MemberForm工作得很好,當我創建了一個人。當用戶不唯一併且用戶名和出生日期並不唯一時,它也會在表單中給出驗證錯誤。但是,當我嘗試更新保存的表單提示錯誤,並說:「‘MemberForm’對象有沒有屬性‘請求’」

如果我使用

def get_form(self, form_class=None): 
     form = super().get_form(form_class) 
     form.request = self.request 
     return form 

中的UpdateView它提出了我喜歡的自定義驗證錯誤的CreateForm。由於同一個人已經在數據庫中。任何人都可以建議我如何修復Updateform,以便正確更新我現有的數據。

+0

感謝您的答覆。我解決了它,如果self.instance.id:塊在我的乾淨的方法。我會很快發佈我的工作代碼。 –

回答

0

工作代碼爲:

def clean(self): 
    user = get_user(self.request) 
    name = self.cleaned_data.get('name') 
    birth_date = self.cleaned_data.get('birth_date') 
    if self.instance.id: 
     if Person.objects.filter(user=user).exclude(id=self.instance.id).exists(): 
      self.add_error('name', "You already submitted data") 
     elif Person.objects.filter(name=name, birth_date=birth_date).exclude(id=self.instance.id).exists(): 
      self.add_error('name', "Person with this Name and Birth date already exists.") 
    else: 
     if Person.objects.filter(user=user).exists(): 
      self.add_error('name', "You already submitted data") 
     elif Person.objects.filter(name=name, birth_date=birth_date).exists(): 
      self.add_error('name', "Person with this Name and Birth date already exists.") 
    return self.cleaned_data 

和觀點:

class PersonUpdate(UpdateView): 
    template_name = 'member/person_form.html' 
    model = Person 
    success_url = '/person/' 
    form_class = MemberForm 

    def get_form(self, form_class=None): 
     form = super().get_form(form_class) 
     form.request = self.request 
     return form