Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算django表单中的复选框字段?_Django_Django Forms - Fatal编程技术网

如何计算django表单中的复选框字段?

如何计算django表单中的复选框字段?,django,django-forms,Django,Django Forms,我无法理解我代码中的一些错误行为 在这里,我在模板表单中定义radio和复选框,而不是django表单 <form method="post" action="."> {% csrf_token %} {% for optionalitem in optionalcategory.optional_items.all %} <input type="radio" value="{{optionalitem.id}}" name="option">

我无法理解我代码中的一些错误行为

在这里,我在模板表单中定义
radio
复选框
,而不是django表单

<form method="post" action=".">
      {% csrf_token %}
   {% for optionalitem in optionalcategory.optional_items.all %}
     <input type="radio" value="{{optionalitem.id}}" name="option">{{optionalitem.name}}
  {% endfor %}
  {%for topping in toppingcategory.topping.all %}
     <input type="checkbox" value="{{topping.id}}" name="topping">{{topping.name}}
  {% endfor%}
   ........
  </form>
我的模型利用了表单生成的post数据

class OrderItem(SmartModel):
    ......
    option = models.ForeignKey(Optional_Item,null=True,blank=True)
    topping = models.ForeignKey(Topping,null=True, blank=True)
然后我使用上面表单中的postdata创建
OrderItem对象

def add_to_order(request,obj):  
    postdata = request.POST.copy()
    op = postdata.get('option',False)
    optional_item = None
    if op: 
        optional_item = get_object_or_404(Optional_Item, pk=op)
    toppings_checked = postdata.get('topping',None)
    toppings = None
    if toppings_checked: 
        toppings = get_object_or_404(Topping, pk=toppings_checked)
    .....
    if not item_in_orders:
        # creat and save a new order item
        anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID) 
        oi=OrderItem.objects.create(item=i,
                                          topping = toppings,
                                          option = optional_item,
                                          created_by=anon_user,
                                          modified_by=anon_user)
        oi.save()
当我试图计算
OrderItem

def order_subtotal(request):        
    .....
    for order_item in order_items:
        if order_item.item.price:
            order_total += order_item.item.price * order_item.quantity
        elif order_item.option:
            order_total += order_item.option.price * order_item.quantity
        elif order_item.topping:
            order_total += order_item.topping.price * order_item.quantity
    return order_total
当我计算
选项的小计时
的计算结果很好,但是
顶部的小计就不行了。

我不明白为什么。我更喜欢详细的答案,但也很感谢简短的答案。

您应该用常规的
if
替换
elif

现在,如果一个
order\u项目
有一个选项,那么您将不会查看浇头,因为您将立即从
if
块中分支出来

(事实上,如果有价格的话,你不会去看选件或浇头)

你应该做:

  for order_item in order_items:
    if order_item.item.price:
        order_total += order_item.item.price * order_item.quantity
    if order_item.option:
        order_total += order_item.option.price * order_item.quantity
    if order_item.topping:
        order_total += order_item.topping.price * order_item.quantity

@SuziemacTani然后你可能想通过添加打印或日志语句来调试代码的流程。你是对的,使用pdb,我发现问题在于命名,我将正确标记你的anwser,因为我认为它比我之前做的更好。
  for order_item in order_items:
    if order_item.item.price:
        order_total += order_item.item.price * order_item.quantity
    if order_item.option:
        order_total += order_item.option.price * order_item.quantity
    if order_item.topping:
        order_total += order_item.topping.price * order_item.quantity