【问题标题】:Model form not being saved模型表格未保存
【发布时间】:2020-01-20 09:01:55
【问题描述】:

我创建了一个模型表单,并希望在用户在模板中输入值并单击提交时保存数据。

我尝试关注tutorial 来指导我。但是,表单似乎没有保存,我也没有被重定向到我指定的模板

这就是我在 views.py 上的内容

class PaymentView(TemplateView):
    template_name = 'classroom/teachers/app-student-dashboard.html'

    def get(self, request):
        paymentform = MentorPaymentForm()
        return render(request, self.template_name, {'paymentform':paymentform})

    def post(self, request):
        paymentform = MentorPaymentForm(request.POST)
        if paymentform.is_valid:
            payment = paymentform.save(commit=False)
            payment.user = request.user
            payment.save()
            address = paymentform.cleaned_data['address']
            country = paymentform.cleaned_data['country']
            invoice_name = paymentform.cleaned_data['invoice_name']
            account_num = paymentform.cleaned_data['account_num']
            bank_name = paymentform.cleaned_data['bank_name']
            branch_code = paymentform.cleaned_data['branch_code']
            paymentform = MentorPaymentForm()
            return redirect('teachers:app-instructor-dashboard')

        args = {'paymentform': paymentform, 'address': address,
                'country': country, 'invoice_name': invoice_name,
                'account_num': account_num, 'bank_name': bank_name,
                'branch_code': branch_code}
        return render(request, self.template_name, args)

forms.py

class MentorPaymentForm(forms.ModelForm):
    class Meta:
        model = Mentor
        fields = ('address', 'country', 'invoice_name', 'account_num', 'bank_name', 'branch_code')

models.py:

class Mentor(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='mentor')
    COUNTRIES = (
        ('SA', 'South Africa'),
        ('NG', 'Nigeria'),
        ('KE', 'Kenya'),
        ('OT', 'Other')
    )
    address = models.CharField(max_length=500, null=True, blank=True)
    country = models.CharField(max_length=30, choices=COUNTRIES)
    invoice_name = models.CharField(max_length=200, null=False, blank=False)
    account_num = models.IntegerField(default=1234)
    bank_name = models.CharField(max_length=50, null=False)
    branch_code = models.IntegerField(default=1234)

还有我的模板:

<form id="edit-payment-details", method="post",enctype="multipart/form-data" class="form-horizontal">
                        {% csrf_token %}
                      <div class="form-group">
                        <label for="name" class="col-md-2 control-label">Name on Invoice</label>
                        <div class="col-md-6">
                          <div class="form-control-material">
                            <input type="text" class="form-control used" id="name" value="{{ paymentform.invoice_name }}">
                              {{ paymentform.invoice_name }}
                            <label for="invoice_name"></label>
                          </div>
                        </div>
                      </div>
                      <div class="form-group">
                        <label for="address" class="col-md-2 control-label">Address</label>
                        <div class="col-md-6">
                          <div class="form-control-material">
                            <textarea class="form-control used" id="address"> </textarea>
                              {{ paymentform.address }}
                            <label for="address">Address</label>
                          </div>
                        </div>
                      </div>
                      <div class="form-group">
                        <label for="country" class="col-md-2 control-label">Country</label>
...
                          <button type="submit" class="btn btn-success paper-shadow relative" data-z="0.5" data-hover-z="1" data-animated>Update Billing</button>

我注意到我有一个未应用的迁移,但是当我尝试运行迁移时,我收到错误消息:

Apply all migrations: admin, auth, classroom, contenttypes, sessions
Running migrations:
  Applying classroom.0014_auto_20200120_1042...Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: new__classroom_mentor.id

更新

尝试解决运行迁移时出现的错误消息。我尝试删除所有迁移,然后运行 ​​makemigrations 并再次迁移。我不再收到错误唯一约束失败错误。但是我仍然无法将表单的数据保存到我的数据库中

find . -path "*/migr
ations/*.py" -not -name "__init__.py" -delete

【问题讨论】:

  • 您确定数据库中关于 new__classroom_mentor.id 字段没有任何不一致的地方吗?我认为你应该先解决这个问题,然后在你的模型表单上工作
  • @Batman 我不知道
  • paymentform.is_valid 应该被称为方法而不是属性:paymentform.is_valid()

标签: python django django-models django-forms modelform


【解决方案1】:

正如@HelenShy 提到的那样。你必须使用

if paymentform.is_valid():

而不是

if paymentform.is_valid:

因为它是一个方法而不是一个属性

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 2013-02-08
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多