Я потратил много времени, пытаясь отфильтровать сущности, связанные со многими, но результат меня действительно поражает. Я не могу понять, как решить эту проблему и почему это происходит.
У меня есть 2 модели в Django:
class Application(models.Model):
...
forms = models.ManyToManyField(Form, related_name='applications', through='ApplicationForm', blank=True)
...
class Form(models.Model):
...
class ApplicationForm(models.Model):
application = models.ForeignKey(Application, on_delete=models.CASCADE)
form = models.ForeignKey(Form, on_delete=models.CASCADE)
created_at = models.DateTimeField()
updated_at = models.DateTimeField(auto_now=True)
В ApplicationSerializer Я хочу вернуться Отфильтрованные формы, связанные с моей заявкой. Я пытаюсь сделать это следующим образом:
forms = serializer.SerializerMethodField()
def get_forms(self, obj):
qs = obj.forms.filter(status=Form.COMPLETED)
return FormSerializer(qs, many=True, context=self.context).data
У меня есть 2 формы и 3 приложения, которые имеют обе формы. Но моя функция возвращает 6 форм [1, 2, 1, 2, 1, 2], например. Я пытаюсь отладить это и обнаружил, что obj.forms.all()
возвращает 2 формы, но если я добавляю фильтр, он возвращает 6. Я пытаюсь использовать obj.forms.filter(status=Form.COMPLETED).distinct()
, но результат тот же.
Я не могу создать запрос как Forms.objects.filter(status=Form.COMPLETED).filter(pk__in=...)
потому что у меня есть много параметров, предварительно выбранных и аннотированных на уровне менеджера приложений. Поэтому я хочу знать, есть ли способ отфильтровать множество объектов отношений, связанных с моим экземпляром