将模态窗体中的数据插入数据库

2024-06-01 00:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从django中的一个模态表单向DB添加一些数据。填充所有字段并单击submit之后,它不会保存在DB上。以下是模型、视图和表单以及模板。我想问题出在视图.py你知道吗

你知道吗型号.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)

你知道吗视图.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'))

你知道吗表单.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>

你知道吗网址.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'),       

]


Tags: namepydivformaddidtruemodels
1条回答
网友
1楼 · 发布于 2024-06-01 00:46:29

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

要进行检查,可以在if语句打印出“success”之后放置一个print语句,在if语句打印出“failure”之后放置一个print语句。如果您没有看到“success”打印出来,则表示您的表单无效。你知道吗

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

相关问题 更多 >