Python 3.x 使用条件表达式的相关模型

Python 3.x 使用条件表达式的相关模型,python-3.x,django,django-rest-framework,django-2.2,django-annotate,Python 3.x,Django,Django Rest Framework,Django 2.2,Django Annotate,目标:在注释的条件表达式中使用相关模型属性作为过滤器 我目前正在给一个老的Django应用程序添加一些功能,这个应用程序有一些设计问题,我与之无关。经过一些研究,我发现了条件表达式,这很好,也是我所需要的 但是我没能做到 我们有A型、B型和C型 class ModelA(models.Model): name=models.Charfield() reference=models.ForeignKey('app.ModelB') class ModelB(models.Mode

目标:在注释的条件表达式中使用相关模型属性作为过滤器

我目前正在给一个老的Django应用程序添加一些功能,这个应用程序有一些设计问题,我与之无关。经过一些研究,我发现了条件表达式,这很好,也是我所需要的

但是我没能做到

我们有A型、B型和C型

class ModelA(models.Model):
    name=models.Charfield()
    reference=models.ForeignKey('app.ModelB')

class ModelB(models.Model):
    name=models.Charfield()

class ModelC(models.Model):
    name=models.Charfield()
    reference=models.ForeignKey('app.ModelB', related_name='some_reference')
    bool_field=models.BooleanField()
这就是我想做的:

ModelA.objects.all().annotate(some_field=When(Q(reference__some_reference__bool_field=True), 
                                                then=F('reference_some_reference_name')))
这应该可以工作,因为它是由python解释的,但我从MySQL中得到一些语法错误。 我做错了什么?这可能吗

这就是我得到的:

django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHEN `ParametrosPreciosProveedor`.`already_iva` = 1 THEN `ParametrosPreciosProve' at line 1")


在本例中,“ParametersPreciosProvider”是ModelC,“Ready_iva”是bool_字段。

我会尝试在
时删除
,然后删除
注释的部分。Q对象自动执行这些操作——您不需要在Python中定义这些术语

ModelA.objects.all().annotate(some_field=Q(reference__some_reference__bool_field=True), 
                          F('reference_some_reference_name')))

它不起作用,F()与该示例中的参数不匹配。。。