2013-02-15 55 views
1

我有以下情形,我想知道的关于内Django的实现它的最好办法:何处为模型添加方法?

我有两个型号产品。如果产品适合该人,我想给得分。我的问题是不是关于如何计算这个,但在Django内做到这一点?

我一直在想,我能有这样的事情......

Product.object.getscore(Person) 
Or 
Person.object.getscore(Product) 

所以在车型将如何我得到这样做(忘了实际的得分,那不是问题)?但在哪里把这种方法,以及如何在模型中?我不想存储分数,它必须基于传递的对象进行动态分配。

谢谢。

+0

产品和人之间的关系是什么? 1-1,1-M,M-M? – domino 2013-02-15 16:28:28

+0

这取决于您是要计算任何模型的整个查询集的分数,还是计算任一模型实例的属性。 – Brandon 2013-02-15 16:36:11

回答

2

您可以实现以下方式中任一类中的方法:

注:我在这里的假设是,它是一个1-M的关系:

class Product(models.Model): 
    person = ForeignKey(Person) 
    ... 
    def get_score(self): 
    # do your thing here 
    # use a person reference 
    if self.person: 
     # calculate score in one way 
    else: 
     # calculate score some other way 
    return score 

或者你可以实现它Person类。这一切取决于您是想从人的角度还是从产品的角度来工作

您对Product.objects.get_score()提出的建议是针对整个查询集而不是单个项目执行计算。

UPDATE:澄清后该产品是不相关的人

在这种情况下,你可以使用该产品的情况下,你可以再简单地实现它作为

class Product(models.Model): 
    ... 

    def get_score(self, person): 
    # check the conditions you need to calculate the score 
    if person.has_some_property and self.has_some_product_property: 
     # calculate score in one way 
    else: 
     # calculate score some other way 
    return score 

简单地做:

person = Person.objects.get(pk=<some_id>) 
product = Product.objects.get(pk=<some_id>) 
product.get_score(person) 
+0

产品与Person无关。我想要做的只是将人物转化为产品并做一个简单的计算。该计算基于人的类型和产品的类型。即如果人有x和自己有x给出 – Prometheus 2013-02-15 16:38:21

+0

然后反过来是产品有x和自己有x给y – Prometheus 2013-02-15 16:39:20