我有以下场景,我想知道在Django中实现它的最佳方法:
我有两个型号产品和人。如果产品适合此人,我想给出得分。我的问题是不关于如何计算这个但是在Django中这样做的地方?
我一直在想我可以拥有这样的东西......
Product.object.getscore(Person)
Or
Person.object.getscore(Product)
那么我在模型中如何做到这一点(忘记实际得分,那不是问题)?但是在这里放置这种方法以及如何在模型中?我不想存储分数,它必须是基于传递的对象的动态。
感谢。
答案 0 :(得分: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)