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 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
|
||||||
|
|
|
@ -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")
|
||||||
|
]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue