1

我有以下场景,我想知道在 Django 中实现它的最佳方法:

我有两个模型ProductPerson。我想给一个产品是否适合这个人打分。我的问题不是关于如何计算这个,而是在 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 回答