Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得django书籍的总价格?_Django_Django Models_Django Views_Django Signals - Fatal编程技术网

如何获得django书籍的总价格?

如何获得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

如果我在商店里添加了一些书,那么我如何才能得到商店里所选书籍的总价格

信号不起作用,它们不起作用。我想计算一下价格。提交表格后,我没有得到任何总价

贮藏

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