我想选择保留项并按option.effectif对其进行排序,其中在表保留中将option声明为FK。 我想拥有的sql是:
select * from configuration_option, configuration_reservation
where configuration_reservation.option_id= configuration_option.id and valide=True
order by configuration_option.effectif;
对于此选择,我尝试了:
p=Reservation.objects.all().filter(Q(option_id__in=Option.objects.all().order_by('effectif'), valide=True))
模型是:
模型
class Reservation( models.Model):
cours=models.ForeignKey(Cours, on_delete=models.CASCADE)
enseignant=models.ForeignKey(Enseignant, on_delete=models.CASCADE)
date_du_jour_reserve=models.DateField("Date du jour reservé")
option=models.ForeignKey(Option,on_delete=models.CASCADE )
valide=models.BooleanField(blank=True, default=False)
class Meta:
ordering=('date_du_jour_reserve')
class Option(models.Model):
code_option=models.CharField("Code de l'option", max_length=6,)
libelle_option= models.CharField("Libélle de l'option", max_length=100)
effectif=models.IntegerField("Effectif", default=0, validators=[
MinValueValidator(limit_value=0 , message=" Attention votre option a un effectif négatif"),
])
def __str__(self):
return self.libelle_option
class Meta:
ordering=('libelle_option',)
答案 0 :(得分:1)
您应该对查询集本身进行排序。您可以使用双下划线(__
).order_by(..)
[Django-doc]在相关模型上:
Reservation.objects.filter(valide=True).order_by('option__effectif')
option
上的过滤不是必需的,因为Option
是没有ForeignKey
的{{1}},因此这意味着每个null=True
是始终指向Reservation
模型。
如果以后允许使用Option
,则可以使用以下方法进行过滤:
null=True