Поле ввода не может показать ожидаемый результат, который я заполнил в 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}.'}  
Вернуться на верх