mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 19:26:48 +00:00
fix(admin): a default VM that is not exactly one VM is refused on the form
NEW_USER_DEFAULT_INSTANCES names VMs, and a name may repeat across hosts. A name with no VM, or with one on two hosts, made creating any user a 500. The create form now looks the names up and says which one is not exactly one VM; the user and its default VMs are saved together.
This commit is contained in:
parent
2e5ef34473
commit
addff12652
4 changed files with 47 additions and 21 deletions
|
|
@ -1,4 +1,5 @@
|
|||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import password_validation
|
||||
from django.contrib.auth.forms import AdminPasswordChangeForm
|
||||
from django.contrib.auth.models import Group, User
|
||||
|
|
@ -7,6 +8,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
from accounts.forms import UniqueEmailMixin
|
||||
from accounts.models import UserAttributes
|
||||
from instances.models import Instance
|
||||
|
||||
from .models import Permission
|
||||
|
||||
|
|
@ -85,6 +87,17 @@ class UserCreateForm(UserForm):
|
|||
content_type__app_label="accounts", codename="change_password"
|
||||
)
|
||||
|
||||
def clean(self):
|
||||
# the VMs a new user owns, by name: a name may repeat across hosts
|
||||
cleaned = super().clean()
|
||||
self.default_instances = []
|
||||
for name in settings.NEW_USER_DEFAULT_INSTANCES:
|
||||
found = list(Instance.objects.filter(name=name)[:2])
|
||||
if len(found) != 1:
|
||||
raise ValidationError(_("NEW_USER_DEFAULT_INSTANCES: %(name)s is not exactly one VM") % {"name": name})
|
||||
self.default_instances += found
|
||||
return cleaned
|
||||
|
||||
def _post_clean(self):
|
||||
# The validators in AUTH_PASSWORD_VALIDATORS, as on the password change
|
||||
# forms; after the instance has the form's values (username, email).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue