Python AttributeError-类型对象';服务';没有属性';服务价格';

Python AttributeError-类型对象';服务';没有属性';服务价格';,python,django,django-admin,Python,Django,Django Admin,我正在尝试创建类似发票程序的东西,以创建发票和计算价格 我仍然在模型部分,我正在尝试计算单个发票中包含的所有服务,并在Invoices.subtotal中更新它们 我的问题是无法将Services.service\u price的汇总值传递给Invoices.subtotal 当我单击[保存并继续编辑]时,我看到: AttributeError at /admin/invoices/invoices/1/ type object 'Services' has no attribute 'ser

我正在尝试创建类似发票程序的东西,以创建发票和计算价格

我仍然在模型部分,我正在尝试计算单个发票中包含的所有服务,并在Invoices.subtotal中更新它们

我的问题是无法将Services.service\u price的汇总值传递给Invoices.subtotal

当我单击[保存并继续编辑]时,我看到:

AttributeError at /admin/invoices/invoices/1/

type object 'Services' has no attribute 'service_price'

Request Method:  POST
Request URL:  http://192.168.1.3/invmaster/admin/invoices/invoices/1/
Django Version:  1.2.1
Exception Type:  AttributeError
Exception Value:  

type object 'Services' has no attribute 'service_price'

Exception Location:  /opt/invmaster/invoices/models.py in save, line 24
Python Executable:  /usr/bin/python
Python Version:  2.6.5
这里有一些代码:

发票/型号.py

django.db导入模型中的
1
2.
3来自invmaster.general.models导入客户端
4从invmaster.general.models导入作业名称
5从invmaster.general.models导入my_数据
6.
7从十进制输入*
8导入数学
9
10####发票表
11类发票(型号.型号):
12发票号=型号.自动字段(主键=真)
13客户名称=型号。外键(客户)
14创建的日期=models.DateField()
15小计=models.DecimalField('Precio sin IVA:'欧元'),最大位数=6,小数位数=2)
16总计=型号。小数字段('Precio Final:'euros'),最大数字=6,小数位数=2,空白=True,空=True)
17 paid=models.BooleanField()
18类元:
19分贝_表=u'invInvoices'
20
21 def保存(自身、*args、**kwargs):
22#self.subtotal=int(服务.服务价格)
23 f=我的_数据()
24自助小计=服务·服务·价格
25自我总计=自我小计*((十进制(f.IVA)/100)+1)
26超级(发票,自我)。保存(*args,**kwargs)
27
28
29
30####服务表
31类服务(models.Model):
32 JOB_cuanty=((u'H',u'Horas'),
33(u'u',u'Unidades'),
34                         )
35发票id=型号。外汇钥匙(发票)
36服务类型=models.CharField('Tipo',最大长度=1,选项=JOB\u cuanty)
37 service_cuanty=models.IntegerField('Cantidad/Horas',max_length=2)
38服务名称=型号。外键(作业名称)
39服务单位价格=型号。小数字段('Precio por unidad(欧元):',最大位数=6,小数位数=2,空白=True,空=True)
40服务价格=models.DecimalField('Precio(欧元):',最大位数=6,小数位数=2,空白=True,空=True)
41
42类元:
43 db_表=u'invServices'
44 def uuu unicode uuu(自):
45返回u“%s%”(自助服务名称)
46 def保存(自身、*args、**kwargs):
47自助服务价格=自助服务价格*自助服务单价
48超级(服务,自我)。保存(*args,**kwargs)
其他文件: 通用/models.py

###通用表
8类my_数据(models.Model):
...
16 IVA=models.IntegerField(最大长度=2,默认值=18')###IVA=VAT#18=18%
...
26####客户表
27类客户端(models.Model):
28客户端\u id=models.AutoField(主键=True)
29客户端名称=models.CharField(最大长度=45,唯一性=True)
...
###工作
58类作业名称(models.Model):
59作业类型id=models.AutoField(主键=True)
60 job_name=models.CharField('Servicio/Producto',max_length=60,unique=True)
61 job_price=models.DecimalField('Precio sin IVA(欧元:)',最大位数=6,小数位数=2)
62
63类元:
64 db_table=u'genJobNames'
65
66 def uuu unicode uuu(自):
67返回单位“%s(%s)”%(self.job\u名称,self.job\u价格)
对不起,我的英语很糟糕,还有一个问题是它是否愚蠢(我不是程序员,我是系统管理员,我是python/django的新手:-))

提前谢谢

干杯

更新:

档案:

linadmin.homeunix.net/models.txt
linadmin.homeunix.net/admin.txt

您没有任何摘要值<代码>服务。服务价格在这种情况下毫无意义-它是在类级别对模型字段本身的引用,而不是对其任何特定实例的值的引用

您需要一些代码来计算实际值。请记住,从服务到发票有一个ForeignKey,这意味着每个发票可以有许多服务。因此,您大概想要的是与此发票相关的所有服务的总价值。您可以使用聚合解决此问题:

from django.db.models import Sum
service_sum = self.services_set.aggregate(Sum('service_price'))
self.subtotal = service_sum['service_price__sum']

它对数据库执行所有相关服务的
求和
查询

丹尼尔,谢谢你的回答,我知道我没有一个摘要值,但我真正的问题是如何将值从一个类传递到另一个类。p、 如我上面所说,不幸的是,这个问题毫无意义。您不能在类级别上引用这些内容,只能在实例级别上引用,而引用另一个类的实例的方式是通过ForeignKey关系。@DanielRoseman刚刚回答了这个问题。使用上述方法,您可以获得引用特定发票的所有服务的总和。我还建议您将
小计
转换为属性,因为它是不断变化的,不需要显式存储(从您的代码中可以看出)