【问题标题】:Insert data from a modal form to DB将模态表单中的数据插入数据库
【发布时间】:2019-11-26 12:56:39
【问题描述】:

我正在尝试从 django 中的模态表单向数据库添加一些数据。填写完所有字段并单击提交后,它不会保存在数据库中。这是模型、视图和表单以及模板。我认为问题出在views.py上

models.py

class Buyer(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=255)
    phone_numbers = ArrayField(PhoneNumberField())
    industry = models.IntegerField(null=True)
    credit_limit = MoneyField(max_digits=20, decimal_places=2,     
    default_currency='MMK', null=True)
    is_active = models.BooleanField(default=True)
    datetime_created = models.DateTimeField(auto_now_add=True)
    datetime_updated = models.DateTimeField(auto_now=True)

views.py

class BuyerCreateView(AtomicMixin, View):
template_name = 'add_buyer_modal.html'

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

def post(self, request):
    form = BuyerForm(request.POST)
    if form.is_valid():
        form.save()
        messages.success(request, 'Buyer created!', extra_tags='alert alert-success')
        return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))
    messages.error(request, 'Unable create buyer. {}'.format(form.errors), extra_tags='alert alert-danger')
    return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))

forms.py

class BuyerForm(forms.ModelForm):
    class Meta:
        model = Buyer
        fields = ['name', 'phone_numbers', 'industry', 'credit_limit']

模板

<div class="modal fade" id="add-buyer-modal" tabindex="-1" role="dialog">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title">New Buyer</h5>
            <button type="button" data-dismiss="modal" aria-label="Close" class="close">
                <span aria-hidden="true">&times;</span>
            </button>
        </div>
        <div class="col-md-12 modal-body">
            <form id="buyer-form" method="post" class="submit-form" action="{% url 'buyers:add_buyer' %}">
                {% csrf_token %}
                <div class="col-md-12">
                    <div class="form-group label-floating">
                        <label class="control-label">Name</label>
                        <input autocomplete="false" type="text" name="name" class="form-control" required>
                    </div>
                </div>
                <div class="col-md-12">
                    <div class="form-group label-floating">
                        <label class="control-label">Industry</label>
                        <div class="input-group">
                            <input autocomplete="false" type="number" name="industry" class="form-control" required>
                        </div>
                    </div>
                </div>
                <input id="payment-submit" type="submit" class="btn btn-primary pull-right submit-button" />
            </form>
        </div>
    </div>
</div>

urls.py

urlpatterns = [
url(r'^$', buyers_views.BuyerListView.as_view(), name='buyers_list'),
url(r'^(?P<id>[0-9a-f-]+)/$',
    buyers_views.BuyerDetailView.as_view(), name='buyers_detail'),
url(r'^/buyer/add/', buyers_views.BuyerCreateView.as_view(), name='add_buyer'),       

]

【问题讨论】:

  • 你能把你的模板add_buyer_modal.html也发一下吗?
  • 当然,我编辑了问题
  • 我看到表单指向buyers:add_buyer,您确定该网址实际上链接到视图吗?
  • 是的.. 你可以在我现在发布的 urls.py 上看到它
  • 我认为您不会在模板上渲染绑定的BuyerFormPOST的内容是什么?

标签: python django


【解决方案1】:

检查您的表单是否无效。您只需填写 HTML 表单中 3 个字段中的 2 个并将其发送回服务器。因此,当您检查 form.is_valid() 时,它可能返回 False,因此实际上并未保存表单。

要检查,您可以在 if 语句中放置一个 print 语句,打印出“成功”,并在 if 语句后放置一个打印出“失败”的语句。如果您没有看到“成功”打印出来,则表示您的表单无效。

如果这确实是问题所在,请在 HTML 中为表单中的所有字段添加表单字段。默认情况下,您在表单的 fields 属性中包含的任何字段都是必需的。这意味着如果在表单上调用is_valid时未填写该字段,则会引发该字段的验证错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多