Order datalist items by count

This commit is contained in:
Edgar P. Burkhart 2025-01-01 14:14:11 +01:00
parent f98990d0a8
commit 804b2b38e0
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
2 changed files with 22 additions and 24 deletions

View file

@ -1,9 +1,8 @@
from category.models import Category
from django.forms.widgets import TextInput from django.forms.widgets import TextInput
from main.forms import NummiFileInput, NummiForm from main.forms import NummiFileInput, NummiForm
from statement.models import Statement
from .models import Invoice, Transaction from .models import Invoice, Transaction
from .utils import get_datalist
class TransactionForm(NummiForm): class TransactionForm(NummiForm):
@ -25,31 +24,16 @@ class TransactionForm(NummiForm):
_user = kwargs.get("user") _user = kwargs.get("user")
_disable_statement = kwargs.pop("disable_statement", False) _disable_statement = kwargs.pop("disable_statement", False)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields["category"].queryset = Category.objects.filter(user=_user)
self.fields["statement"].queryset = Statement.objects.filter(user=_user) self.fields["category"].queryset = _user.category_set
self.fields["name"].widget = DatalistInput( self.fields["statement"].queryset = _user.statement_set
options=[
t.name self.fields["name"].widget = DatalistInput(options=get_datalist(_user, "name"))
for t in _user.transaction_set.exclude(name=None)
.order_by("name")
.distinct("name")
]
)
self.fields["trader"].widget = DatalistInput( self.fields["trader"].widget = DatalistInput(
options=[ options=get_datalist(_user, "trader")
t.trader
for t in _user.transaction_set.exclude(trader=None)
.order_by("trader")
.distinct("trader")
]
) )
self.fields["payment"].widget = DatalistInput( self.fields["payment"].widget = DatalistInput(
options=[ options=get_datalist(_user, "payment")
t.payment
for t in _user.transaction_set.exclude(payment=None)
.order_by("payment")
.distinct("payment")
]
) )
if _disable_statement: if _disable_statement:
self.fields["statement"].disabled = True self.fields["statement"].disabled = True

View file

@ -1,3 +1,6 @@
from django.db.models import Count
def ac_url(url_name, url_params, context): def ac_url(url_name, url_params, context):
if account := context.get("account"): if account := context.get("account"):
url_name = "account_" + url_name url_name = "account_" + url_name
@ -7,3 +10,14 @@ def ac_url(url_name, url_params, context):
url_params |= {"category": category.pk} url_params |= {"category": category.pk}
return url_name, url_params return url_name, url_params
def get_datalist(user, field):
return [
t[field]
for t in user.transaction_set.exclude(**{field: None})
.values(field)
.order_by(field)
.annotate(n=Count(field))
.order_by("-n")
]