Django ForeignKeyRawIdWidget在内联管理中使用时不会减少查询(堆叠)

时间:2013-03-29 12:34:55

标签: django django-admin

我有这样的foreinkey关系

class Product(models.Model):
    brochure = models.ForeignKey(MediaFile)

由于我的库中有很多MediaFiles,我通常会使用ForeignKeyRawIdWidget来减少查询次数。

但显然在内联模型中使用'ForeignKeyRawIdWidget'并不会影响这一点。它仍然执行大量查询。

有谁知道这是为什么?

管理:

class ProductInline(admin.StackedInline):
    model = models.Product
    prepopulated_fields = {"slug": ("title",)}

    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'brochure':
            kwargs['widget'] = ForeignKeyRawIdWidget(db_field.rel)

        return super(ProductInline, self).formfield_for_dbfield(db_field, **kwargs)

VS

class ProductAdmin(admin.ModelAdmin):

    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'brochure':
            kwargs['widget'] = ForeignKeyRawIdWidget(db_field.rel)

        return super(ProductAdmin, self).formfield_for_dbfield(db_field, **kwargs)

1 个答案:

答案 0 :(得分:2)

无需覆盖表单域。 Django可以选择:

class ProductInline(admin.StackedInline):
    model = models.Product
    raw_id_fields = ['brochure']
    …

这适用于我的StackedInlineTabularInline型号。