如何获得django书籍的总价格?
如果我在商店里添加了一些书,那么我如何才能得到商店里所选书籍的总价格 信号不起作用,它们不起作用。我想计算一下价格。提交表格后,我没有得到任何总价 贮藏 signals.py如何获得django书籍的总价格?,django,django-models,django-views,django-signals,Django,Django Models,Django Views,Django Signals,如果我在商店里添加了一些书,那么我如何才能得到商店里所选书籍的总价格 信号不起作用,它们不起作用。我想计算一下价格。提交表格后,我没有得到任何总价 贮藏 signals.py from django.db.models import Sum from django.db.models.signals import pre_save from django.dispatch import receiver from .models import Store from .models impo
from django.db.models import Sum
from django.db.models.signals import pre_save
from django.dispatch import receiver
from .models import Store
from .models import Book
@receiver(pre_save, sender=Store)
def save_total_price(sender, instance, **kwargs):
instance.total = Book.objects.all().aggregate(Sum("price"))["price__sum"]
apps.py
from django.apps import AppConfig
class ReportConfig(AppConfig):
name = 'report'
def ready(self):
import report.signals
init.py
default_app_config = "report.apps.ReportAppConfig"
你可以用一个信号 在应用程序中创建文件
singals.py
@receiver(预保存,发送方=存储)
def save_总价(发送方,实例,**kwargs):
instance.total=Book.objects.all().aggregate(总和(“价格”)[“价格总和”]
在应用程序的配置中连接信号,如下所示:
default_app_config = "{app_path}.apps.WhateverAppConfig"
#app.py
类WhateverAppConfig(AppConfig):
name=“{app_path}”
def就绪(自我):
导入{app_path}.信号
现在指向应用程序的\uuuuu init\uuuuuuuuupy
,如下所示:
default_app_config = "{app_path}.apps.WhateverAppConfig"
其他解决方案可能包括保存该信息的缓存变量(我认为这是更好的方法)。如果要将总价保存到数据库中,您需要在信号中定义一个函数,并更改
m2m\u
。谢谢你们所有帮助我的人。这段代码对我很有用。:)
你不需要重写save方法,只需创建一个用@property修饰的函数,并使用相同的聚合逻辑返回一个值是的,我必须尝试此函数。你想建议我如何定义此函数并解决此错误?你确定需要将其存储在数据库中吗?您还可以添加一个方法
Store
类来动态获取此值yyes我尝试了此代码我得到了此错误raisevalueerror(“%r”需要在“ValueError:”之前为字段“%s”指定一个值:”“需要为字段“id”指定一个值”在使用这种多对多关系之前。
明白了,我理解错了,我编辑了这篇文章。你现在可以检查如何操作。是的,亲爱的!当我试图保存StoreForm'对象没有属性'instence'
时,我遇到了一个错误。instence
中有一个打字错误。你从哪里得到这个错误?信号不起作用这算不上什么?
def save_total_price(sender, instance, action, *args, **kwargs):
if action in ['post_add', 'post_remove', 'post_clear']:
books = instance.books.all()
instance.total_price = 0
for book in books:
instance.total_price += book.price
instance.save()
m2m_changed.connect(save_total_price, sender=Patient.books.through)