【问题标题】:POST checkbox value in Django Unit TestDjango单元测试中的POST复选框值
【发布时间】:2015-03-05 09:43:08
【问题描述】:

我正在尝试在 Django Unit Test 中测试一个 POST 请求,这个 POST 请求将被重定向到其他 url,但响应没有被重定向,当我打印响应时,我发现有一条错误消息,需要复选框,这就是我的请求没有被重定向的原因。

错误:

AssertionError:响应未按预期重定向:响应代码为 200(预期为 302)

HTML

    <p>
    <label for="id_is_urgent">Is urgent:</label> 
    <input checked="checked" id="id_is_urgent" name="is_urgent" type="checkbox" />
</p>
    <ul class="errorlist">
       <li>This field is required.</li>
    </ul>

test_views.py

​​>
 def test_post_order_details_view(self):
        expected_url_for_order_list = reverse('order_update', args=(self.order.id,))
        response = self.client.post(reverse('order_update', args=(self.order.id,)),
                                {'customer': str(self.customer.id),
                                 'service': str(self.service.id),
                                 'order_type': str(self.order_type.id),
                                 'assigned_to': str(self.user.id),
                                 'status': str(self.order_status.id),
                                 'order_status_action': str(self.order_status_action.id),
                                 'is_urgent': True}, follow=True
        self.assertEqual(response.status_code, 200)

view.py

​​>
def order_update(request, pk, template_name='orders_app/order_details.html'):
    order = get_object_or_404(CustomerOrder, pk=pk)
    order_lines = OrderLine.objects.filter(order_id=pk)
    customer = order.customer
    service = order.service
    contacts = order.customer.customer_contacts_info.all()

    form = OrderForm(request.POST or None, instance=order)

    if request.method == 'POST':
        if form.is_valid():
            order = form.save()
            messages.info(request, 'Customer Order %s save successfully' % order.id)
            return redirect(reverse('order_update', args=(order.id,)))
    return render(request, template_name, {'form': form,
                                           'order': order,
                                           'lines': order_lines,
                                           'customer': customer,
                                           'service': service,
                                           'contacts': contacts})

forms.py

​​>
class OrderForm(ModelForm):
    notes = forms.CharField(widget=forms.Textarea, required=False)
    is_urgent = forms.BooleanField(required=False)


    class Meta:
        model = CustomerOrder
        fields = ['customer', 'service','status', 'order_status_action', 'order_type', 'assigned_to',
                  'notes', 'is_urgent', 'discount_percentage']

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    只需在 OrderForm 中将复选框字段设为不需要:https://docs.djangoproject.com/en/dev/ref/forms/fields/#required

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多