У меня проблема с prefetch_related
для свойства унаследованной модели.
В models.py У меня есть:
class Security(models.Model):
name = models.TextField()
...other fields
class Fund(Security):
...other fields
@property
def underlying_security(self):
return self.maps_when_mapped.get().original_security
class SecurityToSecurityMap(models.Model):
original_security = models.ForeignKey(Security, related_name="maps_when_original")
mapped_security = models.ForeignKey(Security, related_name="maps_when_mapped")
и в serializers.py
class UnderlyingSecuritySerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField()
class FundSerializer(serializers.ModelSerializer):
underlying_security = UnderlyingSecuritySerializer(read_only=True, allow_null=True)
class Meta:
model = Fund
fields = ("id", "name", "underlying_security")
Теперь, когда я запрашиваю объекты фонда:
queryset = Fund.objects.prefetch_related("maps_when_mapped__original_security")
Django игнорирует предварительную выборку. Поэкспериментировал с `Prefetch, попробовал перенести свойство в родительский - не повезло, все равно получаю сотни запросов. В любом случае это может быть оптимизировано?
Я использую Django 2.2 с Postgres 11
ОБНОВЛЕНИЕ 1
После просмотра вопроса , Я подозреваю, что проблема в том, что когда я использую .get()
в свойстве, он сразу оценивается, но потом не уверен, как его получить без оценки