【发布时间】:2020-12-17 10:02:43
【问题描述】:
如果我在商店中添加一些书籍,那么我如何获得商店中所选书籍的总价格?
信号不起作用,它们不是calculating anything。我想计算selected books。提交表格后,我一无所有,总价是still (0)。
商店
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField(default=0)
class Store(models.Model):
keeper = models.ForeignKey(User, on_delete=models.SET_NULL,null=True)
books = models.ManyToManyField(Book)
total_price = models.IntegerField(default=0)
信号.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
初始化.py
default_app_config = "report.apps.ReportAppConfig"
【问题讨论】:
-
你不需要重写保存方法只需创建一个用@property装饰的函数并使用相同的聚合逻辑返回一个值
-
是的,我必须尝试这个函数你想建议我如何定义这个函数并解决这个错误?
-
您确定需要将其存储在数据库中吗?也可以添加一个方法
Store类来动态获取这个值
标签: django django-models django-views django-signals