django-orchestra/orchestra/apps/domains/forms.py

40 lines
1.5 KiB
Python

from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from . import validators
from .helpers import domain_for_validation
from .models import Domain
class DomainAdminForm(forms.ModelForm):
def clean(self):
""" inherit related top domain account, when exists """
cleaned_data = super(DomainAdminForm, self).clean()
if not cleaned_data['account']:
domain = Domain(name=cleaned_data['name'])
top = domain.get_top()
if not top:
# Fake an account to make django validation happy
account_model = self.fields['account']._queryset.model
cleaned_data['account'] = account_model()
msg = _("An account should be provided for top domain names")
raise ValidationError(msg)
cleaned_data['account'] = top.account
return cleaned_data
class RecordInlineFormSet(forms.models.BaseInlineFormSet):
def clean(self):
""" Checks if everything is consistent """
if any(self.errors):
return
if self.instance.name:
records = []
for form in self.forms:
data = form.cleaned_data
if data and not data['DELETE']:
records.append(data)
domain = domain_for_validation(self.instance, records)
validators.validate_zone(domain.render_zone())