3

我有以下设置:我正在使用 django-rest-framework 和 django-model-utils InheritanceManager 来自动获取子对象。

models.py:
class Location(models.Model):
    address = models.CharField(max_length=255)

class OfferParent(models.Model):
    location = models.OneToOneField(Location)
    ...
    objects = InheritanceManager()

class OfferChild(OfferParent):
    ...


serializers.py:
class LocationSerializer(ModelSerializer):
    class Meta:
        model = Location

class OfferSerializer(ModelSerializer):
    location  = LocationSerializer()
    class Meta:
        model = Offer


view.py:
class OfferViewSet(ModelViewSet):
    ...
    def get_queryset(self):
        return Offer.objects.select_related('location').all().select_subclasses()

我的问题是select_related无法正常工作。当我调用检索操作时,我在调试工具栏中看到两个查询而不是一个。第一个是与位置表的预期内部连接。但随后对位置表有一个额外的查询:

SELECT ••• FROM "offers_offerlocation" WHERE "offers_offerlocation"."id" = 92 

所以我select_related用来连接表,但序列化程序以某种方式对数据库进行了额外的查询。

如果我不使用其余框架并直接获取对象,

Offer.objects.select_related('location').select_subclasses().first()

它作为例外工作,并且只访问数据库一次。

有谁知道如何解决这个问题?

4

0 回答 0