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”未定义也未定义此错误相同的错误。。顺便说一句,谢谢你的努力,兄弟