我正在尝试从Django的模式形式向DB添加一些数据。填写所有字段并单击提交后,它不会保存在数据库中。这是模型,视图和表单以及模板。我认为问题出在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">×</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'),
]
答案 0 :(得分:0)
检查表格是否无效。您只需填写HTML表单的3个字段中的2个,然后将其发送回服务器。因此,当您检查form.is_valid()
时是否可能返回False,因此实际上并没有保存表单。
要进行检查,您可以在if语句中打印出“成功”,然后在if语句中打印出“ failure”之后,放置一条打印语句。如果看不到“成功”字样,则表示您的表格无效。
如果确实是问题所在,请在HTML中为表单中的所有字段添加表单字段。默认情况下,您包含在表单的fields属性中的任何字段都是必需的。这意味着,如果在表单上调用is_valid
时未填写该字段,则会抛出该字段的验证错误。