我在覆盖内联管理的查询集时遇到一些问题。
这是一个沼泽标准的父管理员和内联管理员:
class MyInlineAdmin(admin.TabularInline):
model = MyInlineModel
def queryset(self, request):
qs = super(MyInlineAdmin, self).queryset(request)
return qs
class ParentAdmin(admin.ModelAdmin):
inlines = [MyInlineAdmin]
admin.site.register(ParentAdminModel, ParentAdmin)
现在我可以做
qs.filter(user=request.user)
或 qs.filter(date__gte=datetime.today())
没问题。
但是我需要的是 MyInlineModel 实例或 ParentAdminModel 实例(不是模型!),因为我需要根据它来过滤我的查询集。
是否可以在 queryset() 方法中获取 self.instance 或 obj 之类的东西(例如在 get_readonly_fields() 或 get_formset() 中)?
希望这是有道理的。非常感谢任何帮助。
class MyInlineAdmin(admin.TabularInline):
model = MyInlineModel
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
"""enable ordering drop-down alphabetically"""
if db_field.name == 'car':
kwargs['queryset'] = Car.objects.order_by("name")
return super(MyInlineAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
class ParentAdmin(admin.ModelAdmin):
inlines = [MyInlineAdmin]
admin.site.register(ParentAdminModel, ParentAdmin)
我假设你的模型看起来像这样:
class MyInlineModel(models.Model):
car=models.Foreignkey(Car)
#blah
了解更多相关信息;阅读有关 formfield_for_foreignkey 的 django 文档--> https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey