Поле ввода не может показать ожидаемый результат, который я заполнил в Django
customer/update_order.html
<table class="table table-striped table-bordered">
<form method="POST" action=".">
{% csrf_token %}
<tr>
<th style="width:160px;text-align:center;background-color: blue;color:red;">食物</th>
<th style="width:100px;text-align:center;background-color: blue;color:red;">單價</th>
<th style="width:100px;text-align:center;background-color: blue;color:red;">數量</th>
<th style="width:100px;text-align:center;background-color: blue;color:red;">總價</th>
<th style="width:100px;text-align:center;background-color: blue;color:red;"></th>
</tr>
{% for item in food %}
<tr>
<td style="text-align:center;vertical-align:middle;">
{{ item.product.name }}
</td>
<td style="text-align:center;vertical-align:middle;">$ {{ item.unit_price }}</td>
<td style="text-align:center;vertical-align:middle;">
<input name="qty{{ item.id }}" type="text" value="{{ item.quantity }}">
</td>
<td style="text-align:center;vertical-align:middle;">
<a href="{% url 'update_item_qty' item.id %}" class="btn btn-warning">更新</a>
</td>
<td style="text-align:center;vertical-align:middle;">$ {{ item.total_price }}</td>
</tr>
{% endfor %}
<tr>
<td colspan="4" align="left" class="upline"><strong>總計</strong></td>
<td align="center" class="upline">$ {{ order.total_price }} (包括$100運費)</td>
</tr>
<tr>
<td colspan="4" align="left" class="upline"><strong>換領積分</strong></td>
<td align="center" class="upline">{{ order.points_earned }}</td>
</tr>
</form>
</table>
views.py
def update_order(request,order_id):
global cartlist_update
order = Order.objects.get(id=order_id)
food = OrderDetail.objects.filter(order=order)
cartlist_update = []
for item in food:
cart = []
menu_food = Menu.objects.get(name=item.product.name)
food_name = OrderDetail.objects.get(product=menu_food)
cart.append(food_name.product.name)
cart.append(food_name.unit_price)
cart.append(food_name.quantity)
cart.append(food_name.total_price)
print(cart)
cartlist_update.append(item)
print(cartlist_update)
context = {'order':order,'food':food}
return render(request,'customer/update_order.html',context)
def update_item_qty(request,item_id):
global cartlist_update
menu = OrderDetail.objects.get(id=item_id)
print(menu.id)
qty_id = 'qty'+str(menu.id)
print(qty_id)
new_quantity = request.POST.get(qty_id,'')
print(new_quantity)
order_id = menu.order.id
## original_food = menu.product.name
price = menu.unit_price
return redirect('update_order',order_id=order_id)
models.py
class Order(models.Model):
PAYMENT_OPTIONS = (
('VISA','VISA'),
('Master','Master'),
('Octopus','Octopus'),
('Cash','Cash'),
)
STATUS = (
('Pending','Pending'),
('Approved','Approved'),
('On the way','On the way'),
('Delivered','Delivered'),
('Completed','Completed'),
)
METHODS = (
('外賣自取','外賣自取'),
('送遞','送遞'),
)
user = models.ForeignKey(User,models.CASCADE,null=True,blank=True)
customer = models.CharField(max_length=200,null=True,blank=True)
card_id = models.IntegerField(null=True,blank=True)
code = models.CharField(max_length=10,null=True,blank=True)
mobile = models.IntegerField(null=True,blank=True)
email = models.CharField(max_length=200,null=True,blank=True)
total_price = models.DecimalField(decimal_places=2,max_digits=7)
payment_method = models.CharField(max_length=50,choices=PAYMENT_OPTIONS,null=True,blank=True)
driver = models.ForeignKey(Driver,models.CASCADE,null=True,blank=True)
status = models.CharField(max_length=50,choices=STATUS,default='Pending')
take_method = models.CharField(max_length=50,choices=METHODS,null=True,blank=True)
points_earned = models.IntegerField(default=0)
date = models.DateTimeField(auto_now_add=True)
address = models.CharField(max_length=350,null=True,blank=True)
## def save(self,commit=True):
## new_order = super(Order,self).save(commit=False)
## new_order.code = 'K00'+str(self.new_order.id)
## if commit:
## new_order.save()
def __str__(self):
return str(self.customer)+'\'s Order'
class OrderDetail(models.Model):
order = models.ForeignKey(Order,models.CASCADE)
product = models.ForeignKey(Menu,models.CASCADE)
unit_price = models.IntegerField(default=0)
quantity = models.IntegerField(default=0)
total_price = models.IntegerField(default=0)
def __str__(self):
return str(self.order.customer)+'\'s --- '+str(self.product.name)+' x '+str(self.quantity)
Я пытаюсь запустить представление update_item_qty после щелчка по гиперссылке. Однако если я пытаюсь вывести результат с помощью request.POST.get('qty'+str(menu.id),''), он возвращает пустое значение вместо значения, которое я поместил в поле ввода под названием 'qty'+str(menu.id), несмотря на то, что я включил форму внутрь. Может ли кто-нибудь показать мне, где проблема?
Вы можете получить доступ к переменным в POST-запросе, перебирая все пары ключ-значение в запросе post.
views.py
def update_item_qty(request,item_id):
# Loop over all key value pairs in the POST request.
for k, v in request.POST.items():
# Check if the key starts with qty
if k.startswith('qty'):
# Get the item id and the quantity
item_id = k.split('qty')[1]
quantity = v
print(f'The item {item_id} has the quantity {v}.'}