例如,我有以下模型:
class Person(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
class SNS(models.Model):
name = models.CharField(max_length=255)
# for display in raw_id_fields
def __str__(self):
return self.name
class PersonSNS(models.Model):
person = models.ForeignKey('Person', related_name='sns')
sns = models.ForeignKey('SNS')
url = models.CharField(max_length=255)
在admin.py
class PersonSNSInline(admin.StackedInline):
model = PersonSNS
fields = ('sns', 'url')
raw_id_fields = ('sns',)
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
inlines = [PersonSNSInline]
def get_queryset(self, request):
return super(PersonAdmin, self).get_queryset(request).prefetch_related('sns')
但是,django-debug-toolbar
显示执行的SQL
,如:
SELECT `sns`.`id`, `sns`.`name` FROM `sns` WHERE `sns`.`id` IN (1, 2, 3, 5, 6)
以及
SELECT `sns`.`id`, `sns`.`name` FROM `sns` WHERE `sns`.`id` = 1
Duplicated 5 times.
SELECT `sns`.`id`, `sns`.`name` FROM `sns` WHERE `sns`.`id` = 5
Duplicated 5 times.
SELECT `sns`.`id`, `sns`.`name` FROM `sns` WHERE `sns`.`id` = 6
Duplicated 5 times.
SELECT `sns`.`id`, `sns`.`name` FROM `sns` WHERE `sns`.`id` = 3
Duplicated 5 times.
SELECT `sns`.`id`, `sns`.`name` FROM `sns` WHERE `sns`.`id` = 2
Duplicated 5 times.
我想知道为什么PersonSNSInline
虽然我已经预取了相关的数据,但是仍然一个接一个地查询数据库。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐