Django 如何显示表中每个用户的所有订单金额,而无需重复用户名两次
我有这个订单型号:Django 如何显示表中每个用户的所有订单金额,而无需重复用户名两次,django,django-queryset,Django,Django Queryset,我有这个订单型号: class Order(models.Model): productType = [ ('Document', 'Document'), ('Parcel', 'Parcel'), ('Box', 'Box') ] serviceType = [ ('Home', 'Home delivery'), ('Office', 'Office delivery'), ('Pick up from office', 'Pick up f
class Order(models.Model):
productType = [
('Document', 'Document'),
('Parcel', 'Parcel'),
('Box', 'Box')
]
serviceType = [
('Home', 'Home delivery'),
('Office', 'Office delivery'),
('Pick up from office', 'Pick up from office'),
]
delivery_StatusType = [
('Return', 'Return'),
('Delivering', 'Delivering'),
('Pending', 'Pending'),
('Complete', 'Complete')
]
statustype = [
('Paid', 'Paid'),
('Cash on delivery', 'Cash on delivery')
]
status = [
('Instant', 'Instant'),
('Same Day', 'Same Day'),
('Others', 'Others')
]
payment_types = [
('Cash', 'Cash'),
('Wallet', 'Wallet'),
('Online', 'Online')
]
CHOICE_AREA = [
('Inside Dhaka', 'Inside Dhaka'),
('Dhaka Suburb', 'Dhaka Suburb'),
('Outside Dhaka', 'Outside Dhaka')
]
user = models.ForeignKey(User, on_delete=models.CASCADE)
receiver = models.CharField(max_length=100, blank=False, unique=False)
receiver_Contact = models.CharField(
max_length=20, blank=False, unique=False)
receiver_Email = models.CharField(
max_length=100, blank=False, unique=False)
payment = models.CharField(
max_length=100, choices=payment_types, blank=False)
area = models.CharField(
max_length=100, choices=CHOICE_AREA, blank=True, null=True)
weight = models.CharField(max_length=100, blank=True, null=True)
service = models.CharField(choices=serviceType, max_length=100)
product_Type = models.CharField(choices=productType, max_length=100)
contents = models.CharField(max_length=100, blank=False, unique=False)
quantity = models.CharField(max_length=100, blank=False, unique=False)
package = models.ForeignKey(
Package, on_delete=models.CASCADE, default=0)
priority = models.CharField(
choices=status, blank=True, null=True, max_length=20)
amount = models.CharField(max_length=100, blank=True, unique=False)
delivery_Status = models.CharField(
choices=delivery_StatusType, blank=True, null=True, max_length=50)
paid = models.BooleanField(default=False)
reference_id = models.CharField(max_length=100, blank=True, unique=True)
delivery_time = models.DateField(blank=True, null=True)
created = models.DateField(auto_now_add=True)
tran_id = models.CharField(max_length=20, blank=True, null=True)
driver = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='driver', blank=True, null=True)
driver_amount = models.CharField(max_length=5, blank=False, default='0')
delivery_now = models.DateField(auto_now_add=True)
delivery_later = models.DateField(blank=True, null=True)
accept = models.BooleanField(default=False)
start = models.BooleanField(blank=True, null=True)
finish = models.BooleanField(blank=True, null=True)
pick_up_latitude = models.CharField(blank=True, null=True, max_length=50)
pick_up_longitude = models.CharField(blank=True, null=True, max_length=50)
delivery_latitude = models.CharField(blank=True, null=True, max_length=50)
delivery_longitude = models.CharField(blank=True, null=True, max_length=50)
otp = models.CharField(max_length=10, blank=True, null=True)
pickup_finish = models.BooleanField(default=False)
approve_change_delivery_address = models.BooleanField(
blank=True, null=True, default=False)
confirm_change_delivery_address = models.BooleanField(
blank=True, null=True, default=False)
def __str__(self):
return self.user.username
用户模型:
class User(AbstractUser):
CITIES = [
('Dhaka','Dhaka'),
('Rajshahi','Rajshahi'),
('Chittagong','Chittagong'),
('Sylhet','Sylhet'),
('Khulna','Khulna'),
('Mymensingh','Mymensingh'),
('Rangpur','Rangpur'),
('Dinajpur','Dinajpur'),
]
Vehicle_type = [
('Truck','Truck'),
('Van','Van'),
('Bike','Bike')
]
email = models.EmailField(unique=True)
contact = models.CharField(null=False,blank=False,max_length=20)
contact2 = models.CharField(null=True,blank=True,max_length=20)
contact3 = models.CharField(null=True,blank=True,max_length=20)
contact4 = models.CharField(null=True,blank=True,max_length=20)
address = models.CharField(null=False,blank=False,max_length=100)
address2 = models.CharField(null=True,blank=True,max_length=100)
postal_code = models.CharField(null=True,blank=True,max_length=10)
city = models.CharField(max_length=30,choices=CITIES)
username = models.CharField(max_length=200,unique=True)
user_pic = models.ImageField(upload_to='media/images/')
n_id = models.CharField(max_length=100)
quote = models.CharField(max_length=250,blank=True,null=True,default='Bio Here. . .')
driving_license = models.ImageField(upload_to='media/documents/')
vehicle_type = models.CharField(max_length=30,choices=Vehicle_type)
vehicle_no = models.CharField(max_length=50)
latitude = models.CharField(max_length=100,default=0)
longitude = models.CharField(max_length=100,default=0)
is_driver = models.BooleanField(default=False)
is_delivery_man = models.BooleanField(default=False)
is_merchant = models.BooleanField(default=False)
is_agent = models.BooleanField(default=False)
is_user = models.BooleanField(default=False)
is_available = models.BooleanField(default=False)
def __str__(self):
return self.username
现在的问题是我想显示用户名、收款总额和单个用户(is_代理)的订单总额。虽然查询集可以对一个用户重复多个订单,但不会重复任何名称两次。
我只想在一个表行中显示一个用户订单的总金额和总交付量,然后其他行将用于其他用户。注意:过滤(交付状态=“完成”)
更新:
agents = User.objects.filter(is_active=True,is_agent=True)
for agent in agents:
agent_id = agent.id
all_orders = Order.objects.filter(user_id = agent_id, delivery_Status="Pending", delivery_time__month = date,
delivery_time__year = year)
现在在这里,我希望每个代理从他们那里收集的总交付数量和总金额,但不希望显示同一用户的所有查询集,而是希望仅按其姓名在表中显示一次,并且所有交付总额和总交付量将显示在该行中,就像给定的表一样
我尝试过这个,但没有追踪到哪个收藏是为谁准备的
individual_orders = []
final_list = []
grand_final_list = []
order_amount = []
individual_orders_count = []
agents = User.objects.filter(is_active=True,is_agent=True)
for agent in agents:
agent_id = agent.id
all_orders = Order.objects.filter(user_id = agent_id, delivery_Status="Pending", delivery_time__month = date,
delivery_time__year = year)
if all_orders:
individual_orders.append(all_orders)
individual_orders_count.append(len(all_orders))
cash_collection = Order.objects.filter(user_id = agent_id, delivery_Status="Pending", delivery_time__month = date,
delivery_time__year = year).values('amount').aggregate(Sum('amount'))
for k,v in cash_collection.items():
if v:
order_amount.append(v)
for query in individual_orders:
for entry in query:
final_list.append(entry.user.username)
grand_final_list = list(dict.fromkeys(final_list))
这张桌子可能对你有帮助
all_orders = Order.objects.filter(user_id = agent_id, delivery_Status="Pending", delivery_time__month = date,
delivery_time__year = year).values(id, username=F(user__username)).annotate(total_amount = Sum('amount')).annotate(total_deliveries = Count('id))
最后,我找到了一种在这里展示演示的方法
def driver_deliveries(request):
name = {}
data = []
count = Order.objects.filter(driver__is_driver=True).distinct()
for i in count:
query = Order.objects.filter(driver_id=i.driver.id,delivery_Status="Complete").count()
name[i.driver.username] = data
data.append(query)
data = []
print(name)
for k,v in name.items():
print(k)
for i in v:
print(i)
return render(request,'user/driver_deliveries.html',{'name': name})
你能给我们看看你试过的查询集吗filtering@satyajitbrother请查看updatesAttributeError:'Sum'对象没有属性'annotate',它显示此错误名称'user\uu username'未定义也未定义此错误////可能无法工作我更正了我的答案。。。很抱歉,我暂时无法检查语法-只是想让您了解使用值(…)和注释(…)的想法,您能告诉我它的作用吗?…名称“user\u username”未定义也未定义此错误相同的错误。。顺便说一句,谢谢你的努力,兄弟