MultipleObjectsReturned в / cart / get () вернул более одного заказа - он вернул 3 - PullRequest
0 голосов
/ 19 июня 2020

Я хочу использовать get_or_create в своем коде, но когда он возвращает более одной записи, он показывает ошибку MultipleObjectsReturned. Если есть одна запись, она работает нормально.

Код в Views.py

def cart(request):
       if request.user.is_authenticated:
        customer=request.user.customer
        order , created=Order.objects.get_or_create(customer=customer, complete=False)
        items=order.orderitem_set.all()
    else:
       items=[]
       order={'get_cart_total':0, 'get_cart_items':0}
    context={'items':items, 'order': order}
    return render(request, 'store/cart.html', context)

Любая помощь будет принята с благодарностью.
Спасибо.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Предполагается, что get_or_create ведет себя так (т.е. выполняет get в наборе запросов и, если он не существует, создает. Он обрабатывает только DoesNotExist, но не MultipleObjectsReturned). Ваш вариант использования, возможно, состоит в том, чтобы «гарантировать хотя бы один объект» вместо «гарантировать ровно один объект». Затем вы должны сами написать что-то вроде этого:

queryset = Order.objects.filter(customer=customer, complete=False)
if queryset.exists():
    obj, created = queryset.first(), False
else:
    obj, created = Order.objects.create(customer=customer, complete=False), True
0 голосов
/ 19 июня 2020

это означает, что у вас есть более одной записи с customer = customer, complete = False, но get_or_create () требует единственного совпадения.

  • Удалите другие записи
  • или добавьте больше полей в get_or_create
  • или используйте create () вместо get_or_create (), если вам нужно несколько записей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...