【发布时间】:2015-07-04 08:58:06
【问题描述】:
我有一个表格:
class OrderForm(forms.Form):
delivery_time = models.CharField(max_length=100)
address_city = models.CharField(max_length=40)
address_street = models.CharField(max_length=40)
address_building = models.CharField(max_length=40)
这是我的看法:
def submit(request):
args = {}
args['form'] = OrderForm()
if request.POST:
order_form = OrderForm(request.POST)
if order_form.is_valid():
user = request.user
address_city = order_form.cleaned_data.get('address_city')
address_street = order_form.cleaned_data.get('address_street')
address_building = order_form.cleaned_data.get('address_building')
delivery_time = order_form.cleaned_data.get('delivery_time')
new_order = Order(address_city=address_city,
address_street=address_street,
address_building=address_building,
delivery_date=delivery_time, client=user)
new_order.save()
Basket.objects.filter(client=user).delete()
return redirect('/order/')
else:
args['form'] = order_form
else:
return render(request, 'order_page.html', args)
我猜这个问题出在我的模板上:
<form class="form-horizontal" action="{% url 'order_submit' %}" method="post">
{% csrf_token %}
<div class="control-group">
<label class="control-label" for="address">City<sup>*</sup></label>
<div class="controls">
<input type="text" id="address" placeholder="City name" name="address_city">
</div>
</div>
...
我想问题在于我不只使用{{form}}。但我需要这些样式形成我的表单。我对我的注册模板做同样的事情,它可以工作。注册表单继承UserCreationForm并与User模型绑定,但我的OrderForm继承form.Form。会是什么?
Order model:
class Order(models.Model):
state_choices = ('ACTIVE', 'COMPLETED', 'FROZEN')
order_date = models.DateTimeField(auto_now_add=True)
delivery_time = models.CharField(max_length=100)
address_city = models.CharField(max_length=40)
address_street = models.CharField(max_length=40)
address_building = models.CharField(max_length=40)
state = models.CharField(max_length=200, default='ACTIVE')
client = models.ForeignKey(CustomUser)
【问题讨论】:
-
将打印语句或日志记录添加到您的视图以查看表单是否有效。如果不是,请检查
order_form.errors包含的内容。 -
调试时order_form.is_valid()返回True,order_form.errors为空
-
@Andrew 您可以指定通过
Meta.fields对用户可见的字段。 docs.djangoproject.com/en/1.8/topics/forms/modelforms -
@andrew,您可以提供
request.user作为模型表单的初始值,例如:OrderForm(initial={'client': request.user}, data=request.POST)docs.djangoproject.com/en/1.8/topics/forms/modelforms/… -
如果你想将逻辑保留在默认的 Django 表单中,你需要从
forms.CharField(max=123)而不是models.CharField(max=123)构建字段。更改后,您应该会看到{{ form }}打印出表单并可以检查其标记以创建您自己的。
标签: django forms django-models django-forms