Получение всего PV, созданного для всех пользователей Django - PullRequest
0 голосов
/ 29 января 2020

У меня есть простые модели:

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.

Давайте скажем, у меня есть 6 PV, созданных 3 уникальными пользователями Теперь, что я действительно хочу, это запросить все pv и посчитать pvs, созданные каждым пользователем, но хочу только одного из каждого уникального пользователя и добавить (что, я думаю, должно быть аннотированное) свойство, называемое итоговым значением для каждого пользователя.

Так что, если у пользователя создано 2 PV, его общее число будет равно 2. Пожалуйста, кто-нибудь может мне помочь.

вот мой запрос

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

и как мне отобразить его в моем шаблоне. пожалуйста, кто-нибудь может мне помочь. Похоже, я не знаю, что я делаю. спасибо

1 Ответ

0 голосов
/ 29 января 2020

Попробуйте:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...