2013-02-15 53 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