Аргумент Django: TypeError: int () должен быть строкой, байтовым объектом или числом, а не «свойством» - PullRequest
0 голосов
/ 18 декабря 2018

Это мои модели:

class company(models.Model):
    User = models.ForeignKey(User,related_name="Company_Owner",on_delete=models.CASCADE,null=True,blank=True)
    Name = models.CharField(max_length=50,blank=False)

class group1(models.Model):
    User = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
    group_Name = models.CharField(max_length=32)
    Company = models.ForeignKey(company,on_delete=models.CASCADE,null=True,blank=True,related_name='Company_group') 

class ledger1(models.Model):
    User            = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
    Company         = models.ForeignKey(company,on_delete=models.CASCADE,null=True,blank=True,related_name='Companys')

Я сделал это на мой взгляд:

from accounting_double_entry.models import group1,ledger1

model = company
paginate_by = 10

def get_queryset(self):
    return company.objects.filter(User=self.request.user).order_by('id')

def get_context_data(self, **kwargs):
    context = super(companyListView, self).get_context_data(**kwargs)
    context['selectdates'] = selectdatefield.objects.filter(User=self.request.user)
    groupcach = group1.objects.filter(User=self.request.user, Company=company.pk,Master__group_Name__icontains='Capital A/c')
    groupcacb = groupcach.annotate(
        closing = Coalesce(Sum('ledgergroups__Closing_balance'), 0))

    groupcstcb = groupcacb.aggregate(the_sum=Coalesce(Sum('closing'), Value(0)))['the_sum']

    ledcah = ledger1.objects.filter(User=self.request.user, group1_Name__group_Name__icontains='Capital A/c')   
    ledcacb = ledcah.aggregate(the_sum=Coalesce(Sum('Closing_balance'), Value(0)))['the_sum']

    total_cacb = groupcstcb + ledcacb
    context['capital'] = total_cacb
    return context

Но получаю эту ошибку:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'property'

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

Ошибка в этой строке кода:

        groupcach = group1.objects.filter(User=self.request.user, Company=company.pk,Master__group_Name__icontains='Capital A/c')

Кто-нибудь есть какие-либо идеи, что я делаю неправильно в моемкод

1 Ответ

0 голосов
/ 18 декабря 2018

Переменная company представляется классом (из строки model = company).Вы всегда должны использовать заглавные буквы для названий своих классов (т.е. имя вашей модели Company, а не company).

Эта строка:

groupcach = group1.objects.filter(User=self.request.user, Company=company.pk,Master__group_Name__icontains='Capital A/c')

использует company.pk, поэтому pkэто поле свойства вашего класса company.Вы нигде не определили объект company.

Мой совет:

  • Вернитесь к рефакторингу всего своего кода, чтобы следовать надлежащим соглашениям Python: классы являются CamelCased, переменные, свойстваи функции - змея.
  • Не смешивайте два: group_Name или Closing_balance неверны.
  • related_name для ForeignKey должно быть множественным числом.
  • Затем повторно запустите ваш код, и ошибки станут более очевидными (company не определено).

Причина этого соглашения состоит в том, что они упрощают предотвращение ошибок в дальнейшем,

...