Iam не в состоянии понять некоторые плохое поведение в моем коде,Как я могу вычислить поле checkbox в форме django?
Здесь я определить radio
и check boxes
внутри шаблона формы вместо формы Джанго,
<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>
форма проверки,
.....
final_form = form(request.POST)
if final_form.is_valid():
order.add_to_order(request,a)
....
else:
final_form = partial_order_item_form()
....
я есть моя модель, которая использует почтовые данные, сгенерированные формой;
class OrderItem(SmartModel):
......
option = models.ForeignKey(Optional_Item,null=True,blank=True)
topping = models.ForeignKey(Topping,null=True, blank=True)
тогда я создать OrderItem object
используя POSTDATA из приведенной выше формы,
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
когда я вычисляю промежуточный итог для option
, он работает нормально, но это не для topping
. Я не понимаю, почему. Я предпочитаю подробный ответ, но и короткие оценки.
@SuziemacTani Затем вы можете отлаживать, что поток код происходит через добавление печати или протоколирование заявления. –
Вы правы, используя pdb, я обнаружил, что проблема связана с присвоением имен, я собираюсь отметить ваш anwser правильно, потому что я думаю, что это лучше, чем то, что я делаю. –