diff --git a/nummi/transaction/forms.py b/nummi/transaction/forms.py index 0d661e0..a1601a1 100644 --- a/nummi/transaction/forms.py +++ b/nummi/transaction/forms.py @@ -1,4 +1,5 @@ from category.models import Category +from django.forms.widgets import TextInput from main.forms import NummiFileInput, NummiForm from statement.models import Statement @@ -26,6 +27,30 @@ class TransactionForm(NummiForm): 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["trader"].widget = DatalistInput( + options=[ + t.trader + for t in _user.transaction_set.exclude(trader=None) + .order_by("trader") + .distinct("trader") + ] + ) + self.fields["payment"].widget = DatalistInput( + options=[ + t.payment + for t in _user.transaction_set.exclude(payment=None) + .order_by("payment") + .distinct("payment") + ] + ) if _disable_statement: self.fields["statement"].disabled = True @@ -42,3 +67,16 @@ class InvoiceForm(NummiForm): widgets = { "file": NummiFileInput, } + + +class DatalistInput(TextInput): + template_name = "transaction/forms/widgets/datalist.html" + + def __init__(self, *args, options=[]): + self.options = options + super().__init__(*args) + + def get_context(self, *args): + context = super().get_context(*args) + context["widget"]["options"] = self.options + return context diff --git a/nummi/transaction/templates/transaction/forms/widgets/datalist.html b/nummi/transaction/templates/transaction/forms/widgets/datalist.html new file mode 100644 index 0000000..7d37327 --- /dev/null +++ b/nummi/transaction/templates/transaction/forms/widgets/datalist.html @@ -0,0 +1,9 @@ + + + {% for option in widget.options %}{% endfor %} +