我有以下设置:我正在使用 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()
它作为例外工作,并且只访问数据库一次。
有谁知道如何解决这个问题?