gpt4 book ai didi

python - AttributeError - 类型对象 'Services' 没有属性 'service_price'

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:57 25 4
gpt4 key购买 nike

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

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

我的问题是我无法将 Services.service_price 的汇总值传递给 Invoices.subtotal。

当我点击 [Save and Continue editing] 时,我看到了这个:

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

其他文件:通用/models.py

### 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

最佳答案

您在任何地方都没有汇总值。 Services.service_price 在此上下文中没有意义 - 它是在类级别对模型字段本身的引用,而不是对它的任何特定实例的值的引用。

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

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

它针对所有相关服务的数据库执行 SUM 查询。

关于python - AttributeError - 类型对象 'Services' 没有属性 'service_price',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com