слишком много значений для распаковки (ожидаемая ошибка 2) при получении значения списка из модели

#django-models #django-views

#django-модели #django-views

Вопрос:

в моем view.py у меня есть следующий метод get delivered = Orders.filter('Delivered').count() , который должен возвращать результат, но когда я пытаюсь его запустить, он показывает ошибку слишком много значений для распаковки (ожидается 2)

вот мои коды

Views.py

 from django.shortcuts import render
from .models import *


def index(request):

    customers = Customer.objects.all()
    Orders = orders.objects.all()
    total_orders = Orders.count()
    total_customers= customers.count()
    delivered = Orders.filter('Delivered').count()
    pending= Orders.filter('Pending').count()

    context = {'customers': customers,
               'Orders': Orders,
               'total_orders': total_orders,
               'total_customers': total_customers,
               'delivered':delivered,
               'pending':pending
               }
    return render(request, 'website/index.html', context)
  

models.py

 from django.db import models

class Customer(models.Model):
        name= models.CharField(max_length=200, null=True)
        phone= models.CharField(max_length=200, null=True)
        email= models.CharField(max_length=200, null=True)
        date_created=models.DateTimeField(auto_now_add=True, null=True)

        def __str__(self):
            return self.name


class Tag(models.Model):
        name=models.CharField(max_length=200, null=True)

def __str__(self):
            return self.name


class Products(models.Model):
        CATEGORY= (
            ('Indoor', 'Indoor'),
            ('Out Door', 'Out Door')
        )
        name= models.CharField(max_length=200, null=True)
        price= models.FloatField(null=True)
        category= models.CharField(max_length=200, null=True, choices= CATEGORY)
        discription = models.CharField(max_length=200, null=True, blank=True)
        date_created = models.DateTimeField(auto_now_add=True, null=True)
        tags = models.ManyToManyField(Tag)

        def __str__(self):
            return self.name


class orders(models.Model):
        STATUS = (

            ('Pending', 'Pending' ),
            ('Out of Delivery ',' Out of Delivery'),
            ('Delivered', 'Delivered'),

        )

        customer= models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
        product = models.ForeignKey(Products, null=True, on_delete=models.SET_NULL)
        date_created = models.DateTimeField(auto_now_add=True, null=True)
        status = models.CharField(max_length=200, null=True, choices=STATUS)

        def __str__(self):
            return self.product
  

Ответ №1:

На самом деле, вы допустили глупую ошибку

 delivered = Orders.filter('Delivered').count()
pending= Orders.filter('Pending').count()
  

Это будет что-то вроде этого. Вы должны указать имя поля базы данных в вашем случае, это статус

 delivered = Orders.filter(status='Delivered').count()
pending= Orders.filter(status='Pending').count()