-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を修正して既存のデータを正しく更新する方法を提案することができます。
感謝。 self.instance.id:私のきれいな方法でブロックする場合、私はそれを使用して解決しました。私はすぐに作業コードを投稿します。 –