2013-04-12 6 views
12

インライン管理用クエリーセットをオーバーライドする際に問題があります。今、私はqs.filter(user=request.user)またはqs.filter(date__gte=datetime.today())問題なく行うことができますインライン管理用クエリーセットのオーバーライド

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) 

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

しかし、私が必要とするのは、MyInlineModelインスタンスかParentAdminModelインスタンス(モデルではありません!)です。これに基づいてクエリセットをフィルタリングする必要があります。

queryset()メソッド内でself.instanceやobj(get_readonly_fields()やget_formset()など)を取得することはできますか?

希望はこれが理にかなっています。どんな助けでも大歓迎です。この上の多くのため

class MyInlineModel(models.Model): 
    car=models.Foreignkey(Car) 
    #blah 

;:

+0

役立つhttp://stackoverflow.com/questions/14950193/how-to-get-the-current-model-instance-from-inlineadmin-in-djangoかもしれません –

+0

Django 1.6では、querysetメソッドの名前がget_querysetに変更されたことに注意してください。 https://docs.djangoproject.com/en/dev/releases/1.6/#get-query-set-and-similar-methods-renamed-to-get-queryset – jenniwren

答えて

6
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) 

イムと仮定してモデルは次のようになりformfield_for_foreignkeyにDjangoのドキュメントを読んで - > https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

+1

これはまったく動作しません。 'formfield_for_foreignkey'はドロップダウンや同様のウィジェット用です。代わりに[this solution](http://stackoverflow.com/questions/6703652/limit-the-queryset-of-entries-displayed-for-a-django-admin-inline)を参照してください。 – piro