使用具有条件表达式的相关模型



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

我目前正在为一个旧的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")

在本例中,"参数PreciosProvedor"是ModelC,"already_iva"是bool_field

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

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

查看文档,了解如何使用Q((

相关内容

  • 没有找到相关文章

最新更新