Я немного застрял при необходимости создания запроса Django для фильтрации по типу экземпляра при использовании django-polymorphic.
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, где находится его проектa "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)
Ошибка: «Вы не можете указать целевую таблицу« ClassA »для обновления в предложении FROM»
Возможно, я могу использовать, но я пытаюсь отфильтровать связанный класс ... Iя не уверен, что это в правильном направлении ... https://django -polymorphic.readthedocs.io / en / stable / advanced.html # using-extended-q-objects-in-any-place
Заранее спасибо!
Обновление: Я могу выполнить следующее:
art_set = ArtProject.objects.all()
ClassA.objects.filter(project__in=art_set).update(some_value=0.0)
Однако переведенный оператор SQL будет очень длиннымесли ArtProjects было много записей.Я не уверен, стоит ли мне избегать оператора «in», когда ArtProjects имеет тысячи записей.
Я просматривал операторы Q, но не уверен, как его использовать в этом случае.https://django -polymorphic.readthedocs.io / en / stable / advanced.html # using-extended-q-objects-in-any-place
Q2 = Projects.translate(Q(project__instance_of=ArtProject))
ClassA.objects.filter(Q2).update(some_value=0.0)
Однако я получаювозникла исключительная ситуация: ('Связанное поле получило недопустимый поиск: instance_of',)