【发布时间】:2017-03-19 17:21:02
【问题描述】:
我的模型形式:
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' 对象没有属性'request'”
如果我使用
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.request = self.request
return form
在 UpdateView 中,它会引发我的自定义验证错误,例如 CreateForm。由于同一个人已经在数据库中。谁能建议我如何修复 Updateform 以便正确更新我现有的数据。
【问题讨论】:
-
感谢您的回复。我在我的 clean 方法中使用 if self.instance.id: block 解决了它。我很快就会发布我的工作代码。