Add wiki_link filter for books.
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 6 Sep 2022 11:35:01 +0000 (13:35 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 6 Sep 2022 11:35:01 +0000 (13:35 +0200)
src/catalogue/admin.py
src/club/forms.py
src/pz/admin.py

index 997dd5e..47032ba 100644 (file)
@@ -3,6 +3,11 @@
 #
 from django.contrib import admin
 from catalogue.models import Tag, Book, Fragment, BookMedia, Collection, Source
+from pz.admin import EmptyFieldListFilter
+
+
+class BlankFieldListFilter(EmptyFieldListFilter):
+    with_empty_str = True
 
 
 class TagAdmin(admin.ModelAdmin):
@@ -30,7 +35,10 @@ class BookAdmin(admin.ModelAdmin):
     list_display = (
         'title', 'slug', 'created_at', 'has_epub_file', 'has_html_file', 'has_description',
     )
-    list_filter = ['print_on_demand']
+    list_filter = [
+            'print_on_demand',
+            ('wiki_link', BlankFieldListFilter),
+            ]
     search_fields = ('title',)
     ordering = ('title',)
 
index f919855..2347e2a 100644 (file)
@@ -143,7 +143,7 @@ class DonationStep1Form(forms.ModelForm):
         state['amount'] = \
             self.cleaned_data[f'{which}_amount'] or \
             self.cleaned_data['custom_amount'] or \
-            self.cleaned_data[f'{monthly}_amount_selected']
+            self.cleaned_data[f'{which}_amount_selected']
 
         return state
 
index 23ad9c2..1b88383 100644 (file)
@@ -18,6 +18,8 @@ admin.site.register(models.Campaign)
 
 # Backport from Django 3.1.
 class EmptyFieldListFilter(FieldListFilter):
+    with_empty_str = False
+
     def __init__(self, field, request, params, model, model_admin, field_path):
         self.lookup_kwarg = '%s__isempty' % field_path
         self.lookup_val = params.get(self.lookup_kwarg)
@@ -30,6 +32,8 @@ class EmptyFieldListFilter(FieldListFilter):
             raise IncorrectLookupParameters
 
         lookup_condition = Q(**{'%s__isnull' % self.field_path: True})
+        if self.with_empty_str:
+            lookup_condition |= Q(**{self.field_path: ''})
         if self.lookup_val == '1':
             return queryset.filter(lookup_condition)
         return queryset.exclude(lookup_condition)