次の方法で、いずれかのクラスにメソッドを実装できます。
注:ここでの私の仮定は、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()
いるのは、単一のアイテムではなく、クエリセット全体で計算を実行している場合です。
更新: 製品が人に関連していないことを明確にした後
その場合、単に次のように実装できます
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)