2015-09-05 158 views
3

我正在创建一个网站来学习django框架。这是一个Web开发工作室的网站,您可以在其中自定义您需要它们进行设计的项目。django模型的字段包含其他对象的属性

我的模型架构是:

特征:最小的构件块。 Bundle:您想要包含在您的网站中的一组功能。 项目:功能的整体集合,可以包括(或不)一个包。

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类的features属性中包含的功能的总和。

我该如何做到这一点?我可以创建一个属于对象功能列表的字段吗?

预先感谢您。

+0

“我可以创建一个字段是对象的功能列表”对于这一点,即多对多的关系就足够了(或者,如果不只是一个FO reignkey)。你可以用这个关系来计算总和。这就是为什么有很多东西,外国人等等。 – nishparadox

+0

太好了,我该怎么办? – Paca

+0

我的意思是,什么是右边的: price = ??? – Paca

回答

0

如果你正在寻找一个字段的总和,那么你可以使用像DecimalField

price_sum = DecimalField(max_digits=6, decimal_places=2) 

,并使用该ManyToMany关系,你可以计算总和,并将其保存在这个领域。

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

您可以修改您的Bundle模式是这样的:

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 
相关问题