Я пытаюсь оптимизировать некоторый код. У меня есть модель со многими связанными моделями, и я хочу аннотировать и фильтровать по значению поля определенного типа этих связанных моделей, так как они предназначены для общего использования. Я могу найти все экземпляры типа связанной модели, которую я хочу, или все модели, связанные с родителем, но не связанную модель определенного типа, связанную с родителем. Кто-нибудь может посоветовать?
Я изначально пробовал
parents = parent.objects.all()
parents.annotate(field_value=Subquery(related_model.objects.get(
field__type='specific',
parent_id=OuterRef('id'),
).value)))
Но получаю ошибку This queryset contains a reference to an outer query and may only be used in a subquery
. Когда я пытался
parents = parent.objects.all()
parents.annotate(field_value=Q(related_model.objects.get(
field__type='specific',
parent_id=F('id'),
).value)))
, я получал DoesNotExist: related_field matching query does not exist.
, который кажется ближе, но все еще не работает.
Структура модели:
class parent(models.Model):
id = models.IntegerField(null=False, primary_key=True)
class field(models.Model):
id = models.IntegerField(null=False, primary_key=True)
type = models.CharField(max_length=60)
class related_model(models.Model):
parent = models.ForeignKey(parent, on_delete=models.CASCADE, related_name='related_models')
field = models.ForeignKey(field, on_delete=models.CASCADE, related_name='fields')
Это то, что я хочу сделатьдаже возможно?