#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()