在使用 django-polymorphic 时,我不得不创建一个 Django 查询来根据实例类型进行过滤。
from polymorphic.models import PolymorphicModel
class ClassA(models.Model):
project = select2.fields.ForeignKey(Project, related_name="class_a")
some_value = models.FloatField(default=0.0)
class Project(PolymorphicModel):
topic = models.CharField(max_length=30)
class ArtProject(Project):
artist = models.CharField(max_length=30)
class ResearchProject(Project):
supervisor = models.CharField(max_length=30)
如何过滤 ClassA 对象,其项目是“ArtProject”?
ClassA.objects.filter( ...? ).update(some_value=0.0)
我试过通过以下方式分解它:
art_set = ArtProject.objects.all().values_list("project__id", flat=True)
ClassA.objects.filter(id__in=art_set).update(some_value=0.0)
错误:“您不能在 FROM 子句中指定目标表 'ClassA' 进行更新”
我可能可以使用,但我正在尝试过滤相关的类......我不确定这是否是正确的方向...... https://django-polymorphic.readthedocs.io/en/stable /advanced.html#using-enhanced-q-objects-in-any-places
提前致谢!
更新: 我可以执行以下操作:
art_set = ArtProject.objects.all()
ClassA.objects.filter(project__in=art_set).update(some_value=0.0)
但是,如果 ArtProjects 有很多条目,则翻译后的 SQL 语句会很长。当 ArtProjects 有数千个条目时,我不确定是否应该避免使用“in”语句。
我正在研究 Q 语句,但我不确定在这种情况下如何使用它。 https://django-polymorphic.readthedocs.io/en/stable/advanced.html#using-enhanced-q-objects-in-any-places
Q2 = Projects.translate(Q(project__instance_of=ArtProject))
ClassA.objects.filter(Q2).update(some_value=0.0)
但是,我提出了一个异常:('相关字段查找无效:instance_of',)