13

インライン管理者のクエリセットを上書きするのに問題があります。

沼地標準の親管理者とインライン管理者は次のとおりです。

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() メソッド内で (get_readonly_fields() または get_formset() のように) self.instance や obj のようなものを取得することは可能ですか?

これが理にかなっていることを願っています。どんな助けでも大歓迎です。

4

1 に答える 1

8
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

于 2013-10-14T13:26:23.413 に答える