django模型的领域包括其他对象'属性

时间:2015-09-05 15:18:05

标签: python django

我正在创建一个网站来学习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属性中包含的功能的总和。

我怎样才能做到这一点?我可以创建一个对象列表的字段吗?特征

提前谢谢。

3 个答案:

答案 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