Polymorphic search

This commit is contained in:
Alexandre Iooss 2019-07-17 12:14:23 +02:00
parent 5110d6a16b
commit 1bfcedd4fe
No known key found for this signature in database
GPG Key ID: 6C79278F3FCDCC02
3 changed files with 100 additions and 53 deletions

View File

@ -3,6 +3,8 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from django.contrib import admin
from polymorphic.admin import PolymorphicParentModelAdmin, \
PolymorphicChildModelAdmin, PolymorphicChildModelFilter
from .models.notes import Alias, Note, NoteClub, NoteSpecial, NoteUser
from .models.transactions import MembershipTransaction, Transaction, \
@ -17,14 +19,32 @@ class AliasInlines(admin.TabularInline):
model = Alias
class NoteClubAdmin(admin.ModelAdmin):
@admin.register(Note)
class NoteAdmin(PolymorphicParentModelAdmin):
"""
Admin customisation for NoteClub
Parent regrouping all note types as children
"""
child_models = (NoteClub, NoteSpecial, NoteUser)
list_filter = (PolymorphicChildModelFilter, 'is_active',)
# Use a polymorphic list
list_display = ('__str__', 'balance', 'is_active')
polymorphic_list = True
# Organize notes by registration date
date_hierarchy = 'created_at'
ordering = ['-created_at']
# Search by aliases
search_fields = ['alias__name']
@admin.register(NoteClub)
class NoteClubAdmin(PolymorphicChildModelAdmin):
"""
Child for a club note, see NoteAdmin
"""
inlines = (AliasInlines,)
list_display = ('club', 'balance', 'is_active')
list_filter = ('is_active',)
search_fields = ['club__name']
# We can't change club after creation or the balance
readonly_fields = ('club', 'balance')
@ -42,25 +62,20 @@ class NoteClubAdmin(admin.ModelAdmin):
return False
class NoteSpecialAdmin(admin.ModelAdmin):
@admin.register(NoteSpecial)
class NoteSpecialAdmin(PolymorphicChildModelAdmin):
"""
Admin customisation for NoteSpecial
Child for a special note, see NoteAdmin
"""
list_display = ('special_type', 'balance', 'is_active')
readonly_fields = ('balance',)
class NoteUserAdmin(admin.ModelAdmin):
@admin.register(NoteUser)
class NoteUserAdmin(PolymorphicChildModelAdmin):
"""
Admin customisation for NoteUser
Child for an user note, see NoteAdmin
"""
inlines = (AliasInlines,)
list_display = ('user', 'balance', 'is_active')
list_filter = ('is_active',)
search_fields = ['user__username']
# Organize note by registration date
date_hierarchy = 'user__date_joined'
ordering = ['-user__date_joined']
# We can't change user after creation or the balance
readonly_fields = ('user', 'balance')
@ -78,18 +93,16 @@ class NoteUserAdmin(admin.ModelAdmin):
return False
@admin.register(TransactionTemplate)
class TransactionTemplateAdmin(admin.ModelAdmin):
"""
Admin customisation for TransactionTemplate
"""
list_display = ('name', 'destination', 'amount', 'template_type')
list_filter = ('destination', 'template_type',)
# autocomplete_fields = ('destination',)
# Register your models here.
admin.site.register(NoteClub, NoteClubAdmin)
admin.site.register(NoteSpecial, NoteSpecialAdmin)
admin.site.register(NoteUser, NoteUserAdmin)
# Register other models here.
admin.site.register(MembershipTransaction)
admin.site.register(Transaction)
admin.site.register(TransactionTemplate, TransactionTemplateAdmin)

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-16 15:21+0200\n"
"POT-Creation-Date: 2019-07-17 11:51+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -13,122 +13,144 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps.py:11 models/notes.py:39
#: apps.py:11 models/notes.py:41
msgid "note"
msgstr "note"
#: models/notes.py:21
#: models/notes.py:22
msgid "account balance"
msgstr "solde du compte"
#: models/notes.py:22
#: models/notes.py:23
msgid "in centimes, money credited for this instance"
msgstr "en centimes, argent crédité pour cette instance"
#: models/notes.py:25
#: models/notes.py:27
msgid "active"
msgstr "actif"
#: models/notes.py:28
#: models/notes.py:30
msgid ""
"Designates whether this note should be treated as active. Unselect this "
"instead of deleting notes."
msgstr ""
"Indique si la note est active. Désactiver cela plutôt que supprimer la note."
#: models/notes.py:33
#: models/notes.py:35
msgid "display image"
msgstr "image affichée"
#: models/notes.py:40
#: models/notes.py:42
msgid "notes"
msgstr "notes"
#: models/notes.py:54
#: models/notes.py:53
msgid "user"
msgstr ""
#: models/notes.py:57
msgid "one's note"
msgstr "note d'un utilisateur"
#: models/notes.py:55
#: models/notes.py:58
msgid "users note"
msgstr "notes des utilisateurs"
#: models/notes.py:69
#: models/notes.py:61
#, python-format
msgid "%(user)s's note"
msgstr "Note de %(user)s"
#: models/notes.py:72
msgid "club"
msgstr "club"
#: models/notes.py:76
msgid "club note"
msgstr "note d'un club"
#: models/notes.py:70
#: models/notes.py:77
msgid "clubs notes"
msgstr "notes des clubs"
#: models/notes.py:83 models/transactions.py:31 models/transactions.py:64
#: models/notes.py:80
#, python-format
msgid "Note for %(club)s club"
msgstr "Note du club %(club)s"
#: models/notes.py:93 models/transactions.py:32 models/transactions.py:65
msgid "type"
msgstr "type"
#: models/notes.py:89
#: models/notes.py:99
msgid "special note"
msgstr "note spéciale"
#: models/notes.py:90
#: models/notes.py:100
msgid "special notes"
msgstr "notes spéciales"
#: models/notes.py:98 models/transactions.py:18
#: models/notes.py:111 models/transactions.py:18
msgid "name"
msgstr "nom"
#: models/notes.py:108
#: models/notes.py:121
msgid "alias"
msgstr "alias"
#: models/notes.py:109
#: models/notes.py:122
msgid "aliases"
msgstr "alias"
#: models/transactions.py:25 models/transactions.py:51
#: models/transactions.py:54
#: models/transactions.py:25 models/transactions.py:52
#: models/transactions.py:55
msgid "destination"
msgstr "destination"
#: models/transactions.py:28 models/transactions.py:61
#: models/transactions.py:28 models/transactions.py:62
msgid "amount"
msgstr "montant"
#: models/transactions.py:36
#: models/transactions.py:29
msgid "in centimes"
msgstr "en centimes"
#: models/transactions.py:37
msgid "transaction template"
msgstr "modèle de transaction"
#: models/transactions.py:37
#: models/transactions.py:38
msgid "transaction templates"
msgstr "modèles de transaction"
#: models/transactions.py:45
#: models/transactions.py:46
msgid "source"
msgstr "source"
#: models/transactions.py:58
#: models/transactions.py:59
msgid "quantity"
msgstr "quantité"
#: models/transactions.py:68
#: models/transactions.py:69
msgid "description"
msgstr "description"
#: models/transactions.py:71
#: models/transactions.py:72
msgid "valid"
msgstr "valide"
#: models/transactions.py:75
#: models/transactions.py:76
msgid "transaction"
msgstr "transaction"
#: models/transactions.py:76
#: models/transactions.py:77
msgid "transactions"
msgstr "transactions"
#: models/transactions.py:87
#: models/transactions.py:88
msgid "membership transaction"
msgstr "transaction d'adhésion"
#: models/transactions.py:88
#: models/transactions.py:89
msgid "membership transactions"
msgstr "transactions d'adhésion"

View File

@ -36,6 +36,10 @@ class Note(PolymorphicModel):
max_length=255,
blank=True,
)
created_at = models.DateTimeField(
verbose_name=_('created at'),
auto_now_add=True,
)
class Meta:
verbose_name = _("note")
@ -50,6 +54,7 @@ class NoteUser(Note):
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT,
related_name='note',
verbose_name=_('user'),
)
class Meta:
@ -68,12 +73,16 @@ class NoteClub(Note):
'member.Club',
on_delete=models.PROTECT,
related_name='note',
verbose_name=_('club'),
)
class Meta:
verbose_name = _("club note")
verbose_name_plural = _("clubs notes")
def __str__(self):
return _("Note for %(club)s club") % {'club': str(self.club)}
class NoteSpecial(Note):
"""
@ -94,6 +103,9 @@ class NoteSpecial(Note):
verbose_name = _("special note")
verbose_name_plural = _("special notes")
def __str__(self):
return self.special_type
class Alias(models.Model):
"""