Django-filterを使用して、2つのフィールドの複数の選択肢に基づいてデータベースをフィルタリングできるようにしています。 filterset.pyは次のようになります。Django-filterのORロジック
class TapFilter(django_filters.FilterSet):
bar__region = django_filters.MultipleChoiceFilter(choices=CHOICES, label="Regions:", widget=forms.CheckboxSelectMultiple,help_text="")
bar = django_filters.ModelMultipleChoiceFilter(queryset=Bar.objects.all(), label="Bars:", widget=forms.CheckboxSelectMultiple,help_text="")
ただし、これは2つのリスト間のANDとして機能します。代わりにORが必要です。つまり、いずれのカテゴリにも一致するものを表示する必要があります。
通常のフィルタを使って同様の質問がありましたが、できるだけdjango-filterを使い続けることをお勧めします。
問題のウェブサイトはここにある:http://bestap.pythonanywhere.com/
アップデート:私は私のfiltersets.pyでこれを入れてきましたが、明らかに正しいことをやっていないのです...
class TapFilter(django_filters.FilterSet):
bar__region = django_filters.MultipleChoiceFilter(choices=CHOICES, label="Regions:", widget=forms.CheckboxSelectMultiple,help_text="")
bar = django_filters.ModelMultipleChoiceFilter(queryset=Bar.objects.all(), label="Bars:", widget=forms.CheckboxSelectMultiple,help_text="")
def qs(self):
base_qs = Bar.objects.all()
qs = Bar.objects.none()
for name, filter_ in six.iteritems(self.filters):
value = self.form.cleaned_data[name]
qs = qs | filter_.filter(base_qs, value)
return qs
これは私に与えますエラー 'function'オブジェクトには 'count'という属性はありません。
このフィルタをどのように使用しようとしているかなど、さらに詳細が必要になります。 – Abhinav