【问题标题】:Django: TypeError: int() argument must be a string, a bytes-like object or a number, not 'property'Django:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“属性”
【发布时间】:2019-05-18 20:03:16
【问题描述】:

这是我的模型:

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')

有人知道我在代码中做错了什么吗?

【问题讨论】:

  • group1 定义在哪里?
  • 什么是group1?是型号名称吗?请提供相关信息。
  • 是的,它是一个型号名称...我已经编辑了问题..
  • 请显示group1 型号。请注意,用小写字母命名类是不好的做法。使用大写作为Group
  • 对不起...我已经编辑了我的问题

标签: django django-models django-views


【解决方案1】:

变量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,变量、属性和函数是snake_cased。
  • 不要将两者混为一谈:group_NameClosing_balance 是错误的。
  • related_name 对于 ForeignKey 应该是复数。
  • 然后重新运行代码,错误会更加明显(company 未定义)。

这些约定的原因是它们更容易在以后避免错误。

【讨论】:

  • 恐怕推荐 PEP-8 是一场无望的战斗:stackoverflow.com/a/52603345/67579,三个月前,这已经是一个问题(并被 几个 的回答指出不同的作者)。既然什么都没做,当然麻烦还在。
猜你喜欢
  • 2017-02-15
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2019-08-15
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多