django - 如何从一张表中选择项目并按其属性标记为 FK 对其进行排序
问题描述
我想选择保留项目并按 option.effectif 对其进行排序,其中选项在表保留中声明为 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',)
解决方案
您应该订购查询集本身。您可以使用双下划线 ( ) 在相关模型上.order_by(..)
[Django-doc]__
:
Reservation.objects.filter(valide=True).order_by('option__effectif')
这里的过滤在 上不是必需的option
,因为 anOption
是 aForeignKey
而没有null=True
,因此这意味着 eachReservation
总是指向一个Option
模型。
如果您以后允许null=True
,您可以使用以下内容进行过滤:
Reservation.objects.filter(
option__isnull=False,
valide=True
).order_by('option__effectif')
推荐阅读
- angular - 组合三个 observable,两个使用 forkjoin,一个使用 mergemap
- c# - 实体框架核心中的问题
- excel - 如何遍历一行数据,从该行中的特定单元格中提取值,在另一行中找到它,然后在相交框中输入一个值
- javafx - JavaFX/TornadoFX 中的按钮边框半径转换
- php - 具有多个命名空间的 SOAP 请求
- gherkin - gherkins, 2个场景可以相互依赖吗
- javascript - 不需要的元素突出显示
- java - Springboot crud Repository插入空值
- python - 值“蛇”不支持成员资格测试 python 或 python 3.6
- html - Bootstrap4 对齐移动支付按钮两排三排