如何计算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