![](/img/trans.png)
[英]Django, 2 forms on one page, one form uses data from the other
[英]Saving data from multiple forms in one page
我有一個頁面,有兩種形式。 用戶單擊編輯按鈕后,一個表單將顯示為彈出窗口。
我無法從單擊編輯按鈕后彈出的表單中保存信息。 不知道我做錯了什么。
這就是我的看法
def payment_view(request):
form = MentorPaymentForm()
if request.method == 'POST':
form = MentorPaymentForm(request.POST, request.FILES, instance=request.user)
if form.is_valid():
user,mentor = form.save(commit=False)
return redirect('teachers:payment_view')
else:
form = MentorPaymentForm(instance=request.user)
return render(request, 'classroom/teachers/app-instructor-billing.html', {'form': form})
我的模板:
<form id="billing_details", method="post">
{% csrf_token %}
<label class="col-md-2 control-label">Account Number</label>
<div class="form-group form-control-material">
{{ form.account_num }}
</div>
<label for="bankname" class="col-md-2 control-label">Bank Name</label>
<div class="form-group form-control-material" id="bankname">
{{ form.bank_name }}
</div>
<label for="acc_num" class="col-md-2 control-label">Branch Code</label>
<div class="form-group form-control-material">
{{ form.branch_code }}
</div>
<button type="submit" class="btn btn-success paper-shadow relative" data-z="0.5" data-hover-z="1" data-animated data-dismiss="modal">Update Payment Details</button>
</form>
和編輯按鈕
<a href="#modal-update-credit-card" data-toggle="modal" class="btn btn-white btn-flat"><i class="fa fa-pencil fa-fw"></i> Edit</a>
這是我在網址中的內容
path('payment_view', teachers.payment_view, name='payment_view'),
更新
根據評論中的要求,這里是我刪除 commit=False 時的完整回溯
Traceback:
File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "C:\Users\User\Desktop\djangoproject\django-multiple-user-types-example-master\django_school\classroom\views\teachers.py" in payment_view
124. user,mentor = form.save(commit=False)
File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\functional.py" in inner
257. return func(self._wrapped, *args)
Exception Type: TypeError at /teachers/payment_view
Exception Value: 'User' object is not iterable
和表格
class TeacherSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
linkedin = forms.URLField(max_length=200)
address = forms.CharField(max_length=500)
billing_name = forms.CharField(max_length=200)
account_num = forms.IntegerField()
bank_name = forms.CharField(max_length=50)
branch_code = forms.IntegerField()
class Meta(UserCreationForm.Meta):
model = User
fields = ('email', 'username', 'first_name', 'last_name')
def save(self, commit=True):
self.instance.is_teacher = True
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
mentor = Mentor.objects.get_or_create(
user=user,
linkedin=self.cleaned_data['linkedin'],
address=self.cleaned_data['address'],
billing_name=self.cleaned_data['billing_name'],
account_num=self.cleaned_data['account_num'],
bank_name=self.cleaned_data['bank_name'],
branch_code=self.cleaned_data['branch_code'],
)
return user
...
class MentorPaymentForm(forms.ModelForm):
class Meta:
model = Mentor
fields = ('address', 'billing_name', 'account_num', 'bank_name', 'branch_code')
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.is_teacher = True
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
mentor = Mentor.objects.get_or_create(
user=user,
linkedin=self.cleaned_data['linkedin'],
address=self.cleaned_data['address'],
billing_name=self.cleaned_data['billing_name'],
account_num=self.cleaned_data['account_num'],
bank_name=self.cleaned_data['bank_name'],
branch_code=self.cleaned_data['branch_code'],
)
if commit:
user.save()
return user
user,mentor = form.save(commit=False)
可以只是form.save()
我有一個包含 4 個表單的頁面,盡管從技術上講我將它用作 1 個唯一表單(基本 html),然后在“def post”中我處理 request.POST.dict(),根據外鍵,我把它放在它所屬的地方,但它是一個簡單的形式,不是模型形式或 django 形式。
另一方面,我建議您切換到CBV,它使您更輕松,FBV確實很乏味。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.