1

私は次のシナリオを持っています.Django内でそれを実装する最良の方法について疑問に思っています:

ProductPersonの 2 つのモデルがあります。商品がその人に合っているかどうか点数をつけたい。私の質問は、これを計算する方法ではなく、Django 内のどこでこれを行うのですか?

私はこのようなものを手に入れることができると思っていました…</p>

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

では、モデルでこれを行うにはどうすればよいでしょうか (実際のスコアリングは忘れてください。それは問題ではありません)。しかし、このメソッドをモデルのどこに、どのように配置するのでしょうか? スコアを保存したくありません。渡されたオブジェクトに基づいて動的にする必要があります。

ありがとう。

4

1 に答える 1

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()いるのは、単一のアイテムではなく、クエリセット全体で計算を実行している場合です。

更新: 製品が人に関連していないことを明確にした後

その場合、単に次のように実装できます

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)
于 2013-02-15T16:35:14.273 に答える