python - 将多个表单中的数据保存在一页中
问题描述
我有一个有两种形式的页面。用户单击编辑按钮后,一个表单显示为弹出窗口。
单击编辑按钮后,我无法从弹出的表单中保存信息。不知道我做错了什么。
这就是我的观点
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()
推荐阅读
- ios - ios 图表 - 在轴内部显示标签
- android - 我们可以在不给用户任何奖励的情况下使用 Admob 奖励广告吗?
- python - python HTTPServer return multipart/form-data(返回多个二进制文件)
- c++ - CppAD 中的固定大小特征矩阵
- ruby - 如何使用 RSpec 测试方法是否捕获符号?
- javascript - 在导航中计算过滤的行数
- java - 将 JFoenix JFXDialogLayout 警报通知代码重构为更简单的形式,以便可以将其重用于其他类
- javascript - 哪个会更快?
- reactjs - 使用 Typescript 和 Union 接口从 React 组件中解构 Props
- r - 如何在 dbplyr 中使用自定义 SQL 函数?