0

我有一个简单的模型:

class Pv(models.Model):
   accounts =(
      ('Sub CF','Sub CF'),
      ('Special','Special'),
      ('Directors','Directors'),
      ('Operations','Operations'),
      ('LSGDP','LSGDP'),
      ('DWAP','DWAP'),
      ('Capacity(USD)','Capacity(USD)')
            )
   acc =(
      ('Yes','Yes'),
      ('No', 'No')
        )

   source =(
        ('GOG','GOG'),
        ('Others', 'Others')
      )
   pv =(
         ('General','General'),
         ('Honorarium','Honorarium')
       )
  center=(
    ('Cost Center 1','Cost Center 1'),
    ('Cost Center 2','Cost Center 2'),
    ('Cost Center 3','Cost Center 3'),
    ('Cost Center 4','Cost Center 4'),
    ('Cost Center 5','Cost Center 5')
       )
  stat =(
    ('Completed','Completed'),
    ('Returned','Returned'),
    ('Cancelled','Cancelled')
    )
IA_System_Code = models.AutoField(primary_key = True)
IA_code = models.CharField(max_length = 150)
Date_recieved = models.DateField()
Pv_reference = models.CharField(unique = True, max_length = 120)
Source_of_Funding = models.CharField(max_length=50, choices = source)
Cost_center = models.CharField(max_length=50, choices = center)
Payee = models.CharField(max_length=500)
Description = models.CharField(max_length = 500)
Account_code = models.CharField(max_length=350)
Gross_amount = models.DecimalField(max_digits=19, decimal_places=2)
Withholding_tax = models.DecimalField(max_digits=19, decimal_places=2)
Net_amount = models.DecimalField(max_digits=19, decimal_places=2)
Status = models.CharField(max_length = 60, choices = stat )
Remarks =models.CharField(max_length = 500, blank = True)
Acc_Impress = models.CharField(max_length = 350,choices=acc)
Date_returned =models.DateField(null=True,blank = True)
Type_of_accounts= models.CharField(max_length = 100, choices = accounts)
Type_of_pv = models.CharField(max_length = 20, choices = pv)
returned_to_chest = models.DecimalField(max_digits=19, decimal_places=2)
created = models.DateTimeField(null=True)
created_by = models.ForeignKey('auth.User', blank=True,\ 
                               null=True,\default=None,\
                               on_delete=models.CASCADE,\
                               related_name='create')
modified = models.DateTimeField(null=True)
modified_by = models.ForeignKey('auth.User', blank=True,\ 
                                null=True,default=None\ 
                                ,on_delete=models.CASCADE,\
                                related_name='modified') 
class Meta():
        ordering = ["IA_System_Code"]



def __str__(self):
    return self.Description

def save(self, *args, **kwargs):
    user = get_current_user()
    if user and not user.pk:
        user = None
    if not self.pk:
        self.created_by = user
        self.created = datetime.now()
    else:
        self.modified_by = user
        self.modified = datetime.now()
    super(Pv, self).save(*args, **kwargs)

我正在努力弄清楚,我认为应该是一个简单的查询,使用 Django 的 ORM。

假设我总共有 3 个唯一用户创建的 6 个 PV 现在,我真正想要的是查询所有 pv 并计算每个用户创建的 pv,但只想要每个唯一用户中的一个并添加一个(我认为应该是一个带注释的)属性,称为每个用户的总计。

因此,如果用户创建了 2 个 PV,他的总数将为 2。请任何人帮助我。

这是我的查询

object_list = User.objects.filter(~Q(create = None))\
              .annotate(total=('create__IA_System_Code').count()))`

以及如何在我的模板上显示它。请任何人都可以帮助我。看起来我不知道在做什么。感谢你

4

1 回答 1

0

尝试:

object_list = User.objects.filter(create__isnull=False).annotate(total=Count('create__IA_System_Code', distinct=True))

作为评论,您的代码很难阅读,因为您没有遵循 Python 或 Django 约定。请查看 PEP8 标准和/或 Black 格式化程序 ( https://github.com/psf/black )

于 2020-01-29T08:41:05.637 回答