Skip to content

Commit

Permalink
Replace ModelChoiceField with UserField. Fixes #114
Browse files Browse the repository at this point in the history
this is a custom field which accepts username, email or ID and
is used in many places in Kiwi TCMS. Here it is used to avoid
presenting a huge list of existing accounts to the administrator
and making the selection a bit less clunky.

Still doesn't implement an auto-complete widget but that's
unrelated.
  • Loading branch information
atodorov committed Dec 11, 2020
1 parent 1cbccd7 commit bc0ed5f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
9 changes: 5 additions & 4 deletions tcms_tenants/admin.py
@@ -1,4 +1,4 @@
# Copyright (c) 2019 Alexander Todorov <atodorov@MrSenko.com>
# Copyright (c) 2019-2020 Alexander Todorov <atodorov@MrSenko.com>

# Licensed under the GPL 3.0: https://www.gnu.org/licenses/gpl-3.0.txt

Expand All @@ -7,10 +7,11 @@
from django.urls import reverse
from django.contrib import admin
from django.forms.utils import ErrorList
from django.contrib.auth import get_user_model
from django.utils.translation import gettext_lazy as _
from django.http import HttpResponseForbidden, HttpResponseRedirect

from tcms.core.forms.fields import UserField

from tcms_tenants.models import Tenant
from tcms_tenants.utils import owns_tenant

Expand Down Expand Up @@ -65,8 +66,8 @@ class AuthorizedUsersChangeForm(forms.ModelForm):
tenant = forms.models.ModelChoiceField(
queryset=Tenant.objects.all(),
)
user = forms.models.ModelChoiceField(
queryset=get_user_model().objects.all(), # it is OK to be able to select between all users
user = UserField( # pylint: disable=form-field-help-text-used
help_text=_('Existing username, email or user ID')
)

def __init__(self, # pylint: disable=too-many-arguments
Expand Down
12 changes: 8 additions & 4 deletions tcms_tenants/locale/en/LC_MESSAGES/django.po
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-25 18:19+0000\n"
"POT-Creation-Date: 2020-12-09 20:56+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
Expand All @@ -18,15 +18,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: tcms_tenants/admin.py:39 tcms_tenants/middleware.py:32
#: tcms_tenants/admin.py:41 tcms_tenants/middleware.py:32
msgid "Unauthorized"
msgstr ""

#: tcms_tenants/admin.py:103
#: tcms_tenants/admin.py:71
msgid "Existing username, email or user ID"
msgstr ""

#: tcms_tenants/admin.py:105
msgid "Username"
msgstr ""

#: tcms_tenants/admin.py:108
#: tcms_tenants/admin.py:110
msgid "Full name"
msgstr ""

Expand Down
13 changes: 7 additions & 6 deletions tcms_tenants/tests/test_admin.py
Expand Up @@ -121,23 +121,24 @@ def test_on_error_display_only_current_tenant(self):
response = self.client.post(
reverse('admin:tcms_tenants_tenant_authorized_users_add'), {
# NOTE: No tenant field specified
'user': self.tester2.pk,
'user': self.tester2.username,
'_save': 'Save',
})

self.assertContains(response, "<ul class='errorlist'>", html=True)
self.assertContains(response, "This field is required")
self.assertContains(response, "<option value=''>---------</option>", html=True)
self.assertContains(response, "<option value='' selected>---------</option>", html=True)
self.assertContains(response,
"<option value='%d'>%s</option>" % (self.tenant.pk,
self.tenant),
html=True)
self.assertNotContains(response, self.tenant2)

self.assertContains(response,
"<option value='%d' selected>%s</option>" % (self.tester2.pk,
self.tester2.username),
html=True)
self.assertContains(
response,
'<input id="id_user" type="text" name="user" value="%s" required>' %
self.tester2.username,
html=True)

def test_change_displays_only_current_tenant(self):
self.assertGreater(utils.get_tenant_model().objects.filter(owner=self.tester).count(), 1)
Expand Down

0 comments on commit bc0ed5f

Please sign in to comment.