如何在自定义条件下添加其他模型以进行列表和过滤

问题描述 投票:3回答:2

我有4个型号,来自4个不同的表:

class Profile(models.Model):
    player_name = models.CharField(max_length=150)
    player_surname=models.CharField(max_length=200)
    sport_type=models.CharField(max_length=200)

class Results_2019(models.Model):
    player_name = models.CharField(max_length=150) 
    first_score=models.DecimalField(decimal_places=2)
    second_score=models.DecimalField(decimal_places=2)
    average_score=models.DecimalField(decimal_places=2)

class Results_2018(models.Model):
    player_name = models.CharField(max_length=150)         
    first_score=models.DecimalField(decimal_places=2)
    second_score=models.DecimalField(decimal_places=2)
    average_score=models.DecimalField(decimal_places=2)

class Weight(models.Model):
     player_name = models.CharField(max_length=150)         
     year2019=models.DecimalField(decimal_places=2)
     year2018=models.DecimalField(decimal_places=2)

我使用这些模型基于满足特定条件进行过滤。外键对我不起作用(我试过我没有什么错)。

ABC = []
for MyResults in [Results_2019, Results_2018 ]:

     results_list = MyResults.objects.annotate(increase=F('second_score') / 
     F('first_score'),total=F('second_score') + 
     F('first_score',).filter(increase__gt=0.2,total__gt=average_score,)
     ABC.extend(results_list.values_list('player_name', flat=True))
DoubleSNames = list(set([x for x in ABC if ABC.count(x) == 2]))

finallist=list(Profile.objects.filter(player_name__in=DoubleSNames).
values_list('player_name', 'player_surname'))

code返回符合条件的玩家及其姓氏列表。

但是我无法将Weight class嵌入列表并基于]进行过滤>

 score_weight=first_score/Weight.year19

然后过滤score_weight > 30

我尝试嵌入

weight_list=[Weight.year19,Weight.year18]

如何使用weight_listMyResults来计算score_weight=first_score/Weight.year19

该怎么做?

完全有可能做到这一点吗?

我有来自4个不同表的4个模型:类Profile(models.Model):player_name = models.CharField(max_length = 150)player_surname = models.CharField(max_length = 200)sport_type = models ....

python mysql django-models django-queryset
2个回答
2
投票

我编写了自己的代码,由于这种情况,结果始终为空:

total=second+first
score_weight=total/weight19
if increase > 0.2 and  total > average and average > 50 and total > 70 and 
score_weight > 30 : ABC.append(result.player_name)

1
投票

A)可能的错误:

© www.soinside.com 2019 - 2024. All rights reserved.