Order datalist items by count
This commit is contained in:
parent
f98990d0a8
commit
804b2b38e0
2 changed files with 22 additions and 24 deletions
|
@ -1,9 +1,8 @@
|
|||
from category.models import Category
|
||||
from django.forms.widgets import TextInput
|
||||
from main.forms import NummiFileInput, NummiForm
|
||||
from statement.models import Statement
|
||||
|
||||
from .models import Invoice, Transaction
|
||||
from .utils import get_datalist
|
||||
|
||||
|
||||
class TransactionForm(NummiForm):
|
||||
|
@ -25,31 +24,16 @@ class TransactionForm(NummiForm):
|
|||
_user = kwargs.get("user")
|
||||
_disable_statement = kwargs.pop("disable_statement", False)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields["category"].queryset = Category.objects.filter(user=_user)
|
||||
self.fields["statement"].queryset = Statement.objects.filter(user=_user)
|
||||
self.fields["name"].widget = DatalistInput(
|
||||
options=[
|
||||
t.name
|
||||
for t in _user.transaction_set.exclude(name=None)
|
||||
.order_by("name")
|
||||
.distinct("name")
|
||||
]
|
||||
)
|
||||
|
||||
self.fields["category"].queryset = _user.category_set
|
||||
self.fields["statement"].queryset = _user.statement_set
|
||||
|
||||
self.fields["name"].widget = DatalistInput(options=get_datalist(_user, "name"))
|
||||
self.fields["trader"].widget = DatalistInput(
|
||||
options=[
|
||||
t.trader
|
||||
for t in _user.transaction_set.exclude(trader=None)
|
||||
.order_by("trader")
|
||||
.distinct("trader")
|
||||
]
|
||||
options=get_datalist(_user, "trader")
|
||||
)
|
||||
self.fields["payment"].widget = DatalistInput(
|
||||
options=[
|
||||
t.payment
|
||||
for t in _user.transaction_set.exclude(payment=None)
|
||||
.order_by("payment")
|
||||
.distinct("payment")
|
||||
]
|
||||
options=get_datalist(_user, "payment")
|
||||
)
|
||||
if _disable_statement:
|
||||
self.fields["statement"].disabled = True
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
from django.db.models import Count
|
||||
|
||||
|
||||
def ac_url(url_name, url_params, context):
|
||||
if account := context.get("account"):
|
||||
url_name = "account_" + url_name
|
||||
|
@ -7,3 +10,14 @@ def ac_url(url_name, url_params, context):
|
|||
url_params |= {"category": category.pk}
|
||||
|
||||
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")
|
||||
]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue