Skip to content
Snippets Groups Projects
Commit 7b1bad2f authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add view to link persons to accounts. Closes #48.

parent 579e9473
No related branches found
No related tags found
No related merge requests found
from django import forms
from django.contrib.auth import create_user, get_user_model
from django.utils.translation import ugettext_lazy as _
from .models import Person
class PersonAccountForm(forms.ModelForm):
class Meta:
model = Person
fields = ['user']
last_name = forms.CharField(disabled=True)
first_name = forms.CharField(disabled=True)
user = forms.ModelChoiceField(queryset=get_user_model().objects.all())
new_user = forms.CharField(required=False)
def clean(self) -> None:
if 'new_user' in self.cleaned_data:
if 'user' in self.cleaned_data and self.cleaned_data['user']:
self.add_error('new_user', _('You cannot set a new username when also selecting an existing user.'))
elif get_user_model().objects.filter(username=self.cleaned_data['new_user']).exists():
self.add_error('new_user', _('This username is already in use.'))
else:
new_user_obj = create_user(self.cleaned_data['new_user'],
self.instance.email,
first_name=self.instance.first_name,
last_name=self.instance.last_name)
self.cleaned_data['user'] = new_user_obj
PersonsAccountsFormSet = forms.modelformset_factory(
Person, form=PersonAccountForm, max_num=0, extra=0)
{# -*- engine:django -*- #}
{% extends "core/base.html" %}
{% load bootstrap4 i18n %}
{% block page_title %}
{% blocktrans %}Link persons to accounts{% endblocktrans %}
{% endblock %}
{% block content %}
<form method="post">
{% csrf_token %}
{{ persons_accounts_formset.management_form }}
<table class="table table-striped table-bordered table-hover table-condensed table-responsive w-100 d-block d-md-table">
<tr>
<th>{% blocktrans %}Person{% endblocktrans %}</th>
<th>{% blocktrans %}Existing account{% endblocktrans %}</th>
<th>{% blocktrans %}New account{% endblocktrans %}</th>
</tr>
{% for form in persons_accounts_formset %}
{{ form.id }}
<tr>
<td>{{ form.person_name }}</td>
<td>{{ form.user }}</td>
<td>{{ form.new_user }}</td>
</tr>
{% endfor %}
</table>
<input type="submit" value="Update" />
</form>
{% endblock %}
......@@ -10,6 +10,7 @@ urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('persons', views.persons, name='persons'),
path('persons/accounts', views.persons_accounts, name='persons_accounts'),
path('person', views.person, name='person'),
path('person/<int:id_>', views.person,
{'template': 'full'}, name='person_by_id'),
......
......@@ -6,6 +6,9 @@ from django.http import Http404, HttpRequest, HttpResponse
from django.shortcuts import render
from django_tables2 import RequestConfig
from django.utils.translation import ugettext_lazy as _
from .decorators import admin_required
from .forms import PersonsAccountsFormSet
from .models import Person, Group
from .tables import PersonsTable, GroupsTable
......@@ -120,3 +123,19 @@ def groups(request: HttpRequest) -> HttpResponse:
context['groups_table'] = groups_table
return render(request, 'core/groups.html', context)
@admin_required
def persons_accounts(request: HttpRequest) -> HttpResponse:
context = {}
persons_qs = Person.objects.all()
persons_accounts_formset = PersonsAccountsFormSet(request.POST or None, queryset=persons_qs)
if request.method == 'POST':
if persons_accounts_formset.is_valid():
persons_accounts_formset.save()
context['persons_accounts_formset'] = persons_accounts_formset
return render(request, 'core/persons_accounts.html', context)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment