14

メソッドの引数ではなく Dictionary を使用して Django モデルのフィルターを行うにはどうすればよいですか? これは私がここに持っているものです:

class StoreView(TemplateView):

    def get(self, request):

        # A bunch of gets
        sort = request.GET.get('sort')
        sort_price = request.GET.get('sort_price')
        sort_mfr_method = request.GET.get('mfr_method')

        # The params tpsort by
        sort_params = {}

        if sort is not None:
            sort_params['sort'] = sort

        if sort_price is not None:
            sort_params['sort_price'] = sort_price

        if sort_mfr_method is not None:
            sort_params['sort_mfr_method'] = sort_mfr_method

        # The Model Query
        design_list = models.Design.objects.filter(sort_params)

        # etc...

副次的な質問、辞書の値を設定するよりも良い方法はありますか? 三項などですが、値が存在しない場合に値が存在しないようにする方法はありますか?

sort_params['sort'] = sort if not None else ''
4

2 に答える 2

30

辞書を使用して、次のようにキーワード引数を渡します。

models.Design.objects.filter(**sort_params)

 

条件付きで dict キーを設定する組み込みの方法はありませんが、これを頻繁に行う場合は、独自の方法を作成できます。

def set_if_not_none(mapping, key, value):
    if value is not None:
        mapping[key] = value

class StoreView(TemplateView):

    def get(self, request):

        # A bunch of gets
        sort = request.GET.get('sort')
        sort_price = request.GET.get('sort_price')
        sort_mfr_method = request.GET.get('mfr_method')

        # The params tpsort by
        sort_params = {}

        set_if_not_none(sort_params, 'sort', sort)
        set_if_not_none(sort_params, 'sort_price', sort_price)
        set_if_not_none(sort_params, 'sort_mfr_method', sort_mfr_method)

        # The Model Query
        design_list = models.Design.objects.filter(**sort_params)
于 2013-04-15T15:02:58.417 に答える