我有一個視圖,可以通過 html 頁面將表單詳細資訊保存到兩個不同的 Person 物件(它們具有不同的 ID),但它們駐留在同一個表中(在不同的行上)
看法
person = Person.objects.filter(pk = user.related_person_id).first()
medical_emergency_person = Person.objects.filter(related_entity=medical_emergency_entity).first()
if request.method == "POST":
form1 = PersonUpdateForm(request.POST, instance=person)
form5 = MedicalPersonUpdateForm(request.POST, instance=medical_emergency_person)
form1.save()
form5.save()
else:
form1 = PersonUpdateForm(
initial= {
"title": person.title,
"first_name": person.first_name,
"last_name": person.last_name,
"alias": person.alias
}
)
form5 = MedicalPersonUpdateForm(
initial= {
"title": medical_emergency_person.title,
"first_name": medical_emergency_person.first_name,
"last_name": medical_emergency_person.last_name,
}
)
context['personal_person_form'] = form1
context['personal_medical_emergency_person_form'] = form5
形式
class MedicalPersonUpdateForm(forms.ModelForm):
# FORM META PARAMETERS
class Meta:
model = Person
fields = ('title', 'first_name', 'last_name')
labels = {
'title': _("Title*"),
'first_name': _("Emergency Contact First Name*"),
'last_name': _("Emergency Contact Last Name*")
}
# FORM INITIALISATION TO SET HTML STYLING
def __init__(self, *args, **kwargs):
super(MedicalPersonUpdateForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs['class'] = 'input'
self.fields['first_name'].widget.attrs['class'] = 'input is-danger'
self.fields['last_name'].widget.attrs['class'] = 'input is-danger'
class PersonUpdateForm(forms.ModelForm):
# FORM META PARAMETERS
class Meta:
model = Person
fields = ('title', 'first_name', 'last_name', 'alias')
labels = {
'title': _("Title*"),
'first_name': _("First Name*"),
'last_name': _("Last Name*"),
'alias': _("Alias")
}
# FORM INITIALISATION TO SET HTML STYLING
def __init__(self, *args, **kwargs):
super(PersonUpdateForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs['class'] = 'input'
self.fields['first_name'].widget.attrs['class'] = 'input is-danger'
self.fields['last_name'].widget.attrs['class'] = 'input is-danger'
self.fields['alias'].widget.attrs['class'] = 'input is-danger'
結果
我正在經歷的行為是,在資料庫中,兩個 Person 記錄都是用表格 5 中的詳細資訊寫入的?然后,當頁面在 request.post 上重新加載時,對于頁面上的欄位,名字和姓氏欄位的兩組都只顯示表格 5 的詳細資訊,而不是表格 1 和表格 5。我做錯了什么?
uj5u.com熱心網友回復:
兩者具有相同的欄位名稱。您可以通過使用 a 來避免這種情況prefix=…:
if request.method == 'POST':
form1 = PersonUpdateForm(request.POST, prefix='person', instance=person)
form5 = MedicalPersonUpdateForm(request.POST, prefix='medical', instance=medical_emergency_person)
if form1.is_valid() and form5.is_valid():
form1.save()
form5.save()
return redirect('name-of-some-view')
else:
form1 = PersonUpdateForm(prefix='person', instance=person)
form5 = MedicalPersonUpdateForm(prefix='medical', instance=medical_emergency_person)
context['personal_person_form'] = form1
context['personal_medical_emergency_person_form'] = form5
注意:如果 POST 請求成功,您應該制作一個
redirect[Django-doc] 來實作Post/Redirect/Get模式 [wiki]。這樣可以避免在用戶重繪 瀏覽器時發出相同的 POST 請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436582.html
