querysetの内容を条件によって変えたいです。
例えば、以下のようにしたいです。
東京にある店舗 → AプランとBプランの店舗のみ表示
それ以外の店舗 → プランは関係なく表示
モデルは以下の通りです(不要そうなところが多いので、シンプルにしてあります)。
models.py
python
1class Prefecture(models.Model): 2 name = models.CharField(verbose_name='都道府県名', max_length=20) 3 4 5Plan_CHOICES = ( 6 (0, 'Cプラン'), 7 (1, 'Bプラン'), 8 (2, 'Aプラン'), 9 ) 10class Store(models.Model): 11 name = models.CharField(verbose_name='店舗名', max_length=100) 12 prefecture = models.ForeignKey( 13 Prefecture, verbose_name='都道府県名', on_delete=models.PROTECT,) 14 plan = models.IntegerField( 15 verbose_name='プラン', choices=Plan_CHOICES, default=0)
views.py
python
1class StoreDetailView(DetailView): 2 queryset = Store.objects.all() #東京以外の店舗は全て表示 3 if queryset.values('prefecture__id') == 1: #東京のIDは1 4 queryset = queryset.filter(Q(plan=1) | Q(plan=2)) #東京の店舗はプラン1or2のみを表示 5
以下のIf内の処理が実行されておらず、ここを書き替える必要があると思っています。
python
1if queryset.values('prefecture__id') == 1: 2 queryset = queryset.filter(Q(plan=1) | Q(plan=2))
以下のようにすると、if文の中の処理が実行されるのですが、
prefecture=1ではない(東京以外の)店舗にも適用されてしまいます。
if queryset.filter(prefecture=1).exists(): queryset = queryset.filter(Q(plan=1) | Q(plan=2))
解決策がお分かりになる方、アドバイスを頂ければ幸いです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/26 06:02