AttributeError - type object 'Services' has no attribute 'service_price'
我正在尝试创建类似于发票程序的程序,以创建发票并计算价格。
我仍然在模型部分,我试图计算所有服务包括在一张发票中,并在invoices.subtotal中更新它们。
我的问题是无法将services.service_price的汇总值传递到invoices.subtotal。
当我单击[保存并继续编辑]时,我看到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 1 from django.db import models 2 3 from invmaster.general.models import Client 4 from invmaster.general.models import job_name 5 from invmaster.general.models import my_data 6 7 from decimal import * 8 import math 9 10 ### Invoices table 11 class Invoices (models.Model): 12 invoice_id = models.AutoField(primary_key=True) 13 client_name = models.ForeignKey(Client) 14 date_created = models.DateField() 15 subtotal = models.DecimalField('Precio sin IVA:(euros)',max_digits=6, decimal_places=2) 16 total = models.DecimalField('Precio Final:(euros)',max_digits=6, decimal_places=2, blank=True, null=True) 17 paid = models.BooleanField() 18 class Meta: 19 db_table = u'invInvoices' 20 21 def save(self, *args, **kwargs): 22 #self.subtotal = int(Services.service_price) 23 f = my_data() 24 self.subtotal = Services.service_price 25 self.total = self.subtotal * ((Decimal(f.IVA)/100)+1) 26 super(Invoices, self).save(*args, **kwargs) 27 28 29 30 ### Services table 31 class Services (models.Model): 32 JOB_CUANTITY = ( (u'H',u'Horas'), 33 (u'U',u'Unidades'), 34 ) 35 invoice_id = models.ForeignKey(Invoices) 36 service_type = models.CharField('Tipo',max_length=1, choices=JOB_CUANTITY) 37 service_cuantity = models.IntegerField('Cantidad/Horas', max_length=2) 38 service_name = models.ForeignKey(job_name) 39 service_unit_price = models.DecimalField('Precio por unidad (euros):',max_digits=6, decimal_places=2,blank=True, null=True) 40 service_price = models.DecimalField('Precio (euros):',max_digits=6, decimal_places=2, blank=True, null=True) 41 42 class Meta: 43 db_table = u'invServices' 44 def __unicode__(self): 45 return u'%s' % (self.service_name) 46 def save(self, *args, **kwargs): 47 self.service_price = self.service_cuantity * self.service_unit_price 48 super(Services, self).save(*args, **kwargs) |
其他文件:常规/型号.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ### General table 8 class my_data (models.Model): ... 16 IVA = models.IntegerField(max_length=2, default='18') ### IVA = VAT # 18 = 18% ... 26 ### Clients table 27 class Client (models.Model): 28 client_id = models.AutoField(primary_key=True) 29 client_name = models.CharField(max_length=45, unique=True) ... ### Jobs 58 class job_name (models.Model): 59 job_type_id = models.AutoField(primary_key=True) 60 job_name = models.CharField('Servicio/Producto',max_length=60, unique=True) 61 job_price = models.DecimalField('Precio sin IVA (euros:)', max_digits=6, decimal_places=2) 62 63 class Meta: 64 db_table = u'genJobNames' 65 66 def __unicode__(self): 67 return u'%s (%s)' % (self.job_name, self.job_price) |
抱歉,我的英语和这个问题,如果它是愚蠢的(我不是程序员,我是系统管理员,我是python/django中的新手:-)
提前谢谢
干杯
更新:
文件夹:linadmin.homeunix.net/models.txt文件linadmin.homeunix.net/admin.txt
您没有任何汇总值。在这个上下文中,
您需要一些代码来计算实际值。请记住,您有一个从服务到发票的foreignkey,这意味着每个发票可以有许多服务。所以大概你想要的是与这张发票相关的所有服务的总价值。您可以使用聚合来解决这个问题:
1 2 3 | from django.db.models import Sum service_sum = self.services_set.aggregate(Sum('service_price')) self.subtotal = service_sum['service_price__sum'] |
它针对数据库查询所有相关服务。