簡體   English   中英

在一頁中保存來自多個表單的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM