diff --git a/members/forms.py b/members/forms.py
index eb49a83..67f4754 100644
--- a/members/forms.py
+++ b/members/forms.py
@@ -1,13 +1,14 @@
"""File containing member forms."""
from django import forms
+from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from members.models import Member, Payment, Request
import csv
-from django.utils import timezone
import logging
+from dal import autocomplete
class CSVValidationError(Exception):
@@ -88,6 +89,11 @@ class MemberForm(forms.ModelForm):
class PaymentForm(forms.ModelForm):
"""Payment model form."""
+ member = forms.ModelChoiceField(
+ queryset=Member.objects.all(),
+ widget=autocomplete.ModelSelect2(url='member-autocomplete')
+ )
+
class Meta:
"""Meta for Payment model form."""
diff --git a/members/templates/payment_add.html b/members/templates/payment_add.html
index d1f75b2..90bca77 100644
--- a/members/templates/payment_add.html
+++ b/members/templates/payment_add.html
@@ -4,6 +4,11 @@
{% load i18n %}
{% block content %}
+
+
{% trans "Add payment" %}
@@ -18,4 +23,7 @@
+
+{{ form.media }}
+
{% endblock content %}
diff --git a/members/urls.py b/members/urls.py
index 664e5cd..8cae5f8 100644
--- a/members/urls.py
+++ b/members/urls.py
@@ -1,6 +1,7 @@
"""File containing Member application URLs."""
from django.conf.urls import url
+from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic.base import RedirectView
# members
@@ -20,6 +21,9 @@ from members.views import member_delete
from members.views import payment_list
from members.views import add_many_confirm
+# autocomplete view
+from members.views import MemberAutoComplete
+
# rest api
from members.views import MemberDetail
@@ -110,4 +114,11 @@ urlpatterns = [
# rest api url
url(r'^api/members/(?P\d+)$', MemberDetail.as_view()),
+ # member select autocomplete view
+ url(
+ r'^member-autocomplete/$',
+ permission_required('members.change_member')(MemberAutoComplete.as_view()),
+ name='member-autocomplete',
+ ),
+
]
diff --git a/members/views/applications.py b/members/views/applications.py
index 0005c1d..9207fd7 100644
--- a/members/views/applications.py
+++ b/members/views/applications.py
@@ -8,6 +8,9 @@ from django.conf import settings
from django.utils.translation import ugettext as _
from django.forms.models import model_to_dict
+import logging
+import html
+
from members.views.utils import *
from members.tables import RequestTable
from members.forms import ApplicationForm
diff --git a/members/views/members.py b/members/views/members.py
index d65a5eb..66f43fe 100644
--- a/members/views/members.py
+++ b/members/views/members.py
@@ -7,6 +7,10 @@ from django.core.mail import send_mail
from django.conf import settings
from django.utils.translation import ugettext as _
from django.forms.models import model_to_dict
+from dal import autocomplete
+
+import logging
+import html
from members.models import Member, Request, Payment
from members.forms import MemberForm, CSVValidationError
@@ -102,7 +106,7 @@ def member_submit(request, *args, **kwargs):
if form.is_valid():
form.save()
logging.info("Saved new member to member register"
- "with the following info: {}".format(form))
+ "with the following info: {}".format(form.cleaned_data))
notification = "{} {} {}.".format(_("Successfully added member"),
form.cleaned_data['last_name'],
form.cleaned_data['first_name'])
@@ -180,3 +184,15 @@ def member_edit(request, *args, **kwargs):
form = MemberForm(instance=member)
return render(
request, 'member_edit.html', {'member_id': i, 'form': form})
+
+
+class MemberAutoComplete(autocomplete.Select2QuerySetView):
+ def get_queryset(self):
+ qs = Member.objects.all()
+
+ if self.q:
+ firsts = qs.filter(first_name__istartswith=self.q)
+ lasts = qs.filter(last_name__istartswith=self.q)
+ qs = firsts.union(lasts)
+
+ return qs
diff --git a/members/views/payments.py b/members/views/payments.py
index 9a0d0e0..da6c8aa 100644
--- a/members/views/payments.py
+++ b/members/views/payments.py
@@ -8,6 +8,9 @@ from django.conf import settings
from django.utils.translation import ugettext as _
from django.forms.models import model_to_dict
+import logging
+import html
+
from members.views.utils import *
from members.tables import PaymentTable
from members.forms import PaymentForm
@@ -55,7 +58,7 @@ def payment_submit(request, *args, **kwargs):
form.save()
logging.info(
"Saved new payment to member register with the following info: {}"
- .format(form))
+ .format(form.cleaned_data))
notification = "{} {}.".format(
_("Successfully added payment for member"),
form.cleaned_data['member'])
diff --git a/members/views/utils.py b/members/views/utils.py
index 35b7b84..eeef43d 100644
--- a/members/views/utils.py
+++ b/members/views/utils.py
@@ -8,6 +8,8 @@ from django.conf import settings
from django.utils.translation import ugettext as _
from django.forms.models import model_to_dict
+import logging
+
# REST framework
from members.serializers import MemberSerializer
from rest_framework import generics
diff --git a/requirements.txt b/requirements.txt
index 3c028d5..32dc598 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -26,3 +26,4 @@ django-modeltranslation==0.12.1
django-auditlog==0.4.3
django-phonenumber-field==1.3.0
paho-mqtt==1.3.0
+django-autocomplete-light==3.2.10
diff --git a/sikweb/base.py b/sikweb/base.py
index 6ccab05..e340969 100644
--- a/sikweb/base.py
+++ b/sikweb/base.py
@@ -64,6 +64,8 @@ LOGGING = {
INSTALLED_APPS = [
'modeltranslation', # has to be before admin for translation admin to work
+ 'dal',
+ 'dal_select2',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',