2017-04-21 5 views
1

admin.pyどのようにdjango管理者の注文フィールドをカスタム設定するには?

class MovieItemInline(AjaxSelectAdminTabularInline): 
    model = MovieItem 
    ordering = ['-date'] 


class MovielistAdmin(ModelAdminBase, AjaxSelectAdmin): 
    inlines = (MovieItemInline,) 


admin.site.register(Movielist, MovielistAdmin) 

models.py

class MovieItem(Model): 
    title = CharField(default="") 
    view_number = IntegerField(default=0) 
    price = IntegerField(default=0) 
    date = IntegerField(default=0) 


class Movielist(Model): 
    title = CharField(default="") 
    display_order = CharField(default="date") 

MovieItemInlineはMovielist.display_orderが "日付" に等しい場合、私はそれからソートMovieItem、例えばソートMovieItem、 をしたいMovielistAdminのインライン属性、 ですMovieItem.dateによって。 Movielist.display_orderが "price"の場合は、MovieItem.priceでMovieItemをソートします。 Movielist.display_orderが "view_number"の場合は、MovieItem.view_numberでMovieItemをソートします。 どうすればよいですか? djangoはサポートしていますか?

+0

私は同じ質問があります。 – user3410960

+0

下記の回答はあなたの問題を解決するのに役立ちましたか? –

+0

@nik_m、申し訳ありません。 –

答えて

1

get_orderingメソッドをMovieItemInlineクラス内で上書きできます。

from django.urls import resolve 

def get_ordering(self, request): 
    # get Movielist object instance from request 
    object_id = resolve(request.path).args[0] 

    # retrieve Movielist object 
    movie_list = MovieList.objects.get(id=object_id) 

    # modify ordering based on movie_list display_order value 
    if movie_list.display_order == 'date': 
     return ['-date'] 
    elif movie_list.display_order == 'price': 
     return ['-price']view_number 
    elif movie_list.display_order == 'view_number': 
     return ['-view_number'] 

    # fallback value if non of the above match 
    return ['-title'] 
関連する問題