2017-03-28 9 views
1

インラインのiterableを宣言するDjango管理クラスがあります。ような何か:DjangoAdmin:インライン管理者の親インスタンスへのアクセス

@admin.register(Category) 
class CategoryAdmin(admin.ModelAdmin): 
    ... 
    ... 
    inlines = [CategoryModifiersInline,] 
    ... 
    ... 

は、それから私は、インライン管理者クラスのように持っている:私はいくつかのビジネス要件に基づいて、外部キーのクエリセットをフィルタリング

class CategoryModifiersInline(admin.TabularInline): 

    model = Category.modifiers.through 
    fk_name = 'category' 
    extra = 1 


    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     qs = Product.objects.filter(is_modifier=True).filter(active=True) 
     kwargs['queryset'] = qs 
     return super(CategoryModifiersInline, self).formfield_for_foreignkey(db_field, request, **kwargs) 

このインラインは、changeビューのユーザにのみ表示されます。つまり、カテゴリカテゴリのオブジェクトが作成され、修飾子を追加する場合は、addビューには決して表示されません。

私がしたいことは、カテゴリモデルの属性の1つで外部キーをフィルタリングしていることです。すなわち、formfield_for_foreignkeyメソッドから親オブジェクトにアクセスしたいとします。

これを達成する方法を知っている人はいますか?

答えて

0

私はここでStackOverflowでsimilar questionを見つけて、そこに記載されている方法を使用して解決しました。

インラインのparent_model属性とdjango.core.urlresolversresolveメソッドを使用して、URLに基​​づいてインスタンスを取得します。ここで

コードです:

def get_object(self, request): 
     resolved = resolve(request.path_info) 
     if resolved.args: 
      return self.parent_model.objects.get(pk=resolved.args[0]) 
     return None 

それから私は、私は、フィルタとして使用するオブジェクトのインスタンスを取得するために私のformfield_from_foreignkey方法の中get_objectメソッドを呼び出します。

希望すると助かります!

関連する問題