Я не могу получить соответствующие данные, когда хочу связать внешний ключ с объектом User

models.py

class Order(models.Model):
    PAYMENT_OPTIONS = (
        ('VISA','VISA'),
        ('Master','Master'),
        ('Octopus','Octopus'),
        ('Cash','Cash'),
    )
    STATUS = (
        ('Pending','Pending'),
        ('Delivered','Delivered'),
    )
    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)
    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)
    status = models.CharField(max_length=50,choices=STATUS,default='Pending')
    date = models.DateTimeField(auto_now_add=True)
    address = models.CharField(max_length=350,null=True,blank=True)

    def __str__(self):
        return str(self.customer)+'\'s Order'

views.py

def order_summary(request,order_id,user_id):
    user = User.objects.get(id=user_id)
    customer_order = Order.objects.get(id=order_id,user=user)
    food_order = OrderDetail.objects.filter(order=customer_order)
    context = {
        'customer_order':customer_order,
        'food_order':food_order}
    return render(request,'menu/order_summary.html',context)

urls.py

path('order_summary/<int:order_id>/<int:user_id>/',views.order_summary,name='order_summary'),

navbar.html

<li><a class="dropdown-item" href="{% url 'order_summary' [order_id]%}我的訂單</a></li>

Ошибка:

Reverse for 'order_summary' with arguments '('', 1)' not found. 1 pattern(s) tried: ['order_summary/(?P<order_id>[0-9]+)/(?P<user_id>[0-9]+)/$']

В приведенном выше коде я хочу иметь гиперссылку, которая может получить доступ к методу order_summary с фильтрацией правильного объекта User. Однако, если я попытаюсь поместить соответствующие параметры, соответствующие заказу пользователя, в user.id, я получу сообщение об ошибке, несмотря на то, что я уже включил url в urls.py. Может ли кто-нибудь выяснить проблему, если я хочу указать параметры в навигационной панели HTML?

Вам следует добавить параметр user_id в ваш файл urls.py, чтобы вы могли передать текущего зарегистрированного пользователя (или любой другой идентификатор пользователя, который вы можете пожелать).

Итак, ваши представления будут выглядеть следующим образом:

def order_summary(request,order_id, user_id):
    user = User.objects.get(id=user_id)
    customer_order = Order.objects.get(id=order_id, user=user)
    food_order = OrderDetail.objects.filter(order=customer_order)
    context = {
        'customer_order':customer_order,
        'food_order':food_order}
    return render(request,'menu/order_summary.html',context)

А затем в своих шаблонах вы можете просто передавать идентификатор пользователя.

<li><a class="dropdown-item" href="{% url 'order_summary' [order_id] [user_id] %}我的訂單</a></li>

Я думаю, что вы можете напрямую получить это с помощью обратной связи, вы можете попробовать это,

request.user.order_set.all()

здесь будут получены данные о заказе для текущего пользователя.

Вернуться на верх