mirror of
https://github.com/postgres/pgweb.git
synced 2025-07-25 16:02:27 +00:00
67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
from django import forms
|
|
from django.forms import ValidationError
|
|
|
|
from .models import Organisation
|
|
from django.contrib.auth.models import User
|
|
|
|
|
|
class OrganisationForm(forms.ModelForm):
|
|
remove_manager = forms.ModelMultipleChoiceField(required=False, queryset=None, label="Current manager(s)", help_text="Select one or more managers to remove")
|
|
add_manager = forms.EmailField(required=False)
|
|
|
|
class Meta:
|
|
model = Organisation
|
|
exclude = ('lastconfirmed', 'approved', 'managers', )
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(OrganisationForm, self).__init__(*args, **kwargs)
|
|
if self.instance and self.instance.pk:
|
|
self.fields['remove_manager'].queryset = self.instance.managers.all()
|
|
else:
|
|
del self.fields['remove_manager']
|
|
del self.fields['add_manager']
|
|
|
|
def clean_add_manager(self):
|
|
if self.cleaned_data['add_manager']:
|
|
# Something was added as manager - let's make sure the user exists
|
|
try:
|
|
User.objects.get(email=self.cleaned_data['add_manager'].lower())
|
|
except User.DoesNotExist:
|
|
raise ValidationError("User with email %s not found" % self.cleaned_data['add_manager'])
|
|
|
|
return self.cleaned_data['add_manager']
|
|
|
|
def clean_remove_manager(self):
|
|
if self.cleaned_data['remove_manager']:
|
|
removecount = 0
|
|
for toremove in self.cleaned_data['remove_manager']:
|
|
if toremove in self.instance.managers.all():
|
|
removecount += 1
|
|
|
|
if len(self.instance.managers.all()) - removecount <= 0:
|
|
raise ValidationError("Cannot remove all managers from an organsation!")
|
|
return self.cleaned_data['remove_manager']
|
|
|
|
def save(self, commit=True):
|
|
model = super(OrganisationForm, self).save(commit=False)
|
|
if 'add_manager' in self.cleaned_data and self.cleaned_data['add_manager']:
|
|
model.managers.add(User.objects.get(email=self.cleaned_data['add_manager'].lower()))
|
|
if 'remove_manager' in self.cleaned_data and self.cleaned_data['remove_manager']:
|
|
for toremove in self.cleaned_data['remove_manager']:
|
|
model.managers.remove(toremove)
|
|
|
|
return model
|
|
|
|
def apply_submitter(self, model, User):
|
|
model.managers.add(User)
|
|
|
|
|
|
class MergeOrgsForm(forms.Form):
|
|
merge_into = forms.ModelChoiceField(queryset=Organisation.objects.all())
|
|
merge_from = forms.ModelChoiceField(queryset=Organisation.objects.all())
|
|
|
|
def clean(self):
|
|
if self.cleaned_data['merge_into'] == self.cleaned_data['merge_from']:
|
|
raise ValidationError("The two organisations selected must be different!")
|
|
return self.cleaned_data
|