Python Django-如何为不同的查询排序queryset?
我有一个问题,我想根据基于查询的计算值按降序排列queryset 查询:?水果=苹果&?水果=梨 在这种情况下: 苹果数+梨数+(苹果数*梨数) models.pyPython Django-如何为不同的查询排序queryset?,python,django,django-queryset,Python,Django,Django Queryset,我有一个问题,我想根据基于查询的计算值按降序排列queryset 查询:?水果=苹果&?水果=梨 在这种情况下: 苹果数+梨数+(苹果数*梨数) models.py class Costumer(BaseModel): name = models.CharField('name'), max_length=255, blank=True fruits = models.JsonField('fruit'), null=True, blank=True, defau
class Costumer(BaseModel):
name = models.CharField('name'), max_length=255, blank=True
fruits = models.JsonField('fruit'), null=True, blank=True, default=dict)
我的客户水果看起来像这样:
水果={名称:苹果,计数:10},{名称:梨,计数:4},{名称:樱桃,计数:1},{名称:鳄梨,计数:2}
views.py
def get_queryset(self):
fruits = dict(self.request.GET).get('fruit', [])
queryset = Costumers.objects.all()
if fruits:
queryset = sorted(queryset, reverse = True, key=lambda costumer: self.calculate_order(costumer, fruits))
return queryset
def calculate_order(self, costumer, fruits):
value_list = [fruit['count'] for fruit in costumer.fruits if fruit['name'] in fruits]
return sum(value_list) + (reduce((lambda x, y: x*y), value_list)) if value_list else 0
这似乎是从我到目前为止测试的数据中正确排序的,但是这似乎不是最好的方法。
有没有更好的方法使用Django Queryset API对这些数据进行排序?因为它现在的排序方式有点耗时,因为我必须迭代数据库中的所有记录
编辑:
我有另一个水果模型没有问题
class Costumer(BaseModel):
name = models.CharField('name'), max_length=255, blank=True
fruits = models.ManytoManyField(Fruits, through='CostumerFruits')
class Fruits(BaseModel):
name = models.CharField('name'), max_length=255, blank=True
count = models.IntegerField('count'), null=True, blank=True
如何使用这两个模型和计算值对客户信息进行排序?如果建模是多对多关系,请不要使用
JsonField
。这会使查询更加困难,也降低了保证结构(和引用)完整性的效率。@WillemVanOnsem我编辑了这个问题,我有两个模型没有问题……如果建模是多对多关系,请不要使用JsonField
。它使查询变得更加困难,也降低了保证结构(和引用)完整性的效率。@WillemVanOnsem我编辑了这个问题,我有两个模型没有问题。。。