Переопределение запроса для встроенного администратора

У меня проблемы с переопределением запроса для моего встроенного администратора.

Здесь стандартный родительский администратор и встроенный администратор:

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 (а не модель!), так как мне нужно отфильтровать мой запрос на основе этого.

Можно ли получить что-то вроде self.instance или obj (например, в get_readonly_fields() или get_formset()) внутри метода queryset()?

Надеюсь, это имеет смысл. Любая помощь очень ценится.

Ответ 1

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

для получения дополнительной информации об этом; прочитайте django Docs на formfield_for_foreignkey → https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey