我正在创建一个网站来学习django框架。它是一个Web开发工作室的网站,您可以在其中自定义您需要设计的项目。
我的模型架构是:
特点:最小的积木。 捆绑包:您希望包含在网站中的一组功能。 project:功能的整体集合,可以包括(或不包含)一个包。
from django.db import models
class Feature(models.Model):
name = models.CharField(max_length=100),
price = models.DecimalField(max_digits=6, decimal_places=2),
description = models.TextField(),
progress = models.IntegerField(),
duration = models.IntegerField()
def __str__(self):
return self.name
class Bundle(models.Model):
name = models.CharField(),
features = models.ManyToManyField(Feature),
def __str__(self):
return self.name
这是我到目前为止所做的,它还不完整,但你可以尝试一下我想做的事情。问题是:
我想在bundle和project中包含一个字段来计算它的总成本。字段的值将是我的bundle类的features属性中包含的功能的总和。
我怎样才能做到这一点?我可以创建一个对象列表的字段吗?特征
提前谢谢。
答案 0 :(得分:0)
如果您正在寻找求和的字段,那么您可以使用DecimalField
之类的:
price_sum = DecimalField(max_digits=6, decimal_places=2)
使用ManyToMany
关系,您只需计算总和并将其保存在此字段中。
答案 1 :(得分:0)
字段“是对象的功能列表”是M2M字段。我认为您不需要创建新字段,您可以通过计算当前架构来获取总价格:
# Here you have 'list' of features in boundle
boundle_object.features.all()
# And here you have the sum of prices
from django.db.models import Sum
boundle_object.features.aggregate(summation=Sum('price'))
答案 2 :(得分:0)
您可以像这样修改class Bundle(models.Model):
name = models.CharField(),
features = models.ManyToManyField(Feature)
@property
def total_feature_price(self):
sum = sum(self.features.all().values_list('price', flat=True))
return sum
def __str__(self):
return self.name
模型:
Bundle
然后,如果你有cost = bundle.total_feature_price
个对象,你可以这样做:
apply