wip making view communicate data with form

This commit is contained in:
Rachid Mrad 2023-10-19 02:55:02 -04:00
parent 8dba1234c1
commit b4596d3bcd
No known key found for this signature in database
GPG key ID: EF38E4CEC4A8F3CF
2 changed files with 77 additions and 16 deletions

View file

@ -23,23 +23,25 @@ class DomainAddUserForm(forms.Form):
class IPAddressField(forms.CharField): class IPAddressField(forms.CharField):
# def __init__(self, server_value, *args, **kwargs):
# self.server_value = server_value
# super().__init__(*args, **kwargs)
def validate(self, value): def validate(self, value):
super().validate(value) # Run the default CharField validation super().validate(value) # Run the default CharField validation
ip_list = [ip.strip() for ip in value.split(",")] # Split IPs and remove whitespace # ip_list = [ip.strip() for ip in value.split(",")] # Split IPs and remove whitespace
# TODO: pass hostname from view? # # TODO: pass hostname from view?
hostname = ""
# Call the IP validation method from Domain # hostname = self.form.cleaned_data.get("server", "")
try:
Domain.checkHostIPCombo(hostname, ip_list) # print(f"hostname {hostname}")
except NameserverError as e:
raise forms.ValidationError(str(e)) # # Call the IP validation method from Domain
# try:
# Domain.checkHostIPCombo(hostname, ip_list)
# except NameserverError as e:
# raise forms.ValidationError(str(e))
class DomainNameserverForm(forms.Form): class DomainNameserverForm(forms.Form):
@ -51,8 +53,59 @@ class DomainNameserverForm(forms.Form):
label="IP address", label="IP address",
strip=True, strip=True,
required=False, required=False,
# validators=[
# django.core.validators.validate_ipv46_address
# ],
) )
def __init__(self, *args, **kwargs):
# Access the context object passed to the form
print(f"domain domain domain {kwargs}")
self.domain = kwargs.pop('rachid', None)
print(f"domain domain domain {kwargs}")
super().__init__(*args, **kwargs)
# def __init__(self, request, *args, **kwargs):
# # Pass the request object to the form during initialization
# self.request = request
# super().__init__(*args, **kwargs)
def clean(self):
cleaned_data = super().clean()
server = cleaned_data.get('server', '')
ip = cleaned_data.get('ip', '')
# make sure there's a nameserver if an ip is passed
if ip:
ip_list = [ip.strip() for ip in ip.split(",")]
if not server:
# If 'server' is empty, disallow 'ip' input
raise forms.ValidationError("Name server must be provided to enter IP address.")
try:
Domain.checkHostIPCombo(server, ip_list)
except NameserverError as e:
raise forms.ValidationError(str(e))
# if there's a nameserver, validate nameserver/ip combo
domain, _ = Domain.objects.get_or_create(name="magazine-claim.gov")
# Access session data from the request object
# session_data = self.request.session.get('nameservers_form_domain', None)
print(f"domain domain domain {self.domain}")
if server:
if ip:
ip_list = [ip.strip() for ip in ip.split(",")]
else:
ip_list = [""]
try:
Domain.checkHostIPCombo(domain, server, ip_list)
except NameserverError as e:
raise forms.ValidationError(str(e))
return cleaned_data
NameserverFormset = formset_factory( NameserverFormset = formset_factory(
DomainNameserverForm, DomainNameserverForm,

View file

@ -14,6 +14,7 @@ from django.shortcuts import redirect
from django.template import RequestContext from django.template import RequestContext
from django.urls import reverse from django.urls import reverse
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from django.forms import BaseFormSet
from registrar.models import ( from registrar.models import (
Domain, Domain,
@ -213,12 +214,18 @@ class DomainDNSView(DomainBaseView):
template_name = "domain_dns.html" template_name = "domain_dns.html"
class DomainNameserversView(DomainFormBaseView): class DomainNameserversView(DomainFormBaseView, BaseFormSet):
"""Domain nameserver editing view.""" """Domain nameserver editing view."""
template_name = "domain_nameservers.html" template_name = "domain_nameservers.html"
form_class = NameserverFormset form_class = NameserverFormset
def get_formset_kwargs(self, index):
kwargs = super().get_formset_kwargs(index)
# kwargs['domain'] = self.object # Pass the context data
kwargs.update({"domain", self.object})
return kwargs
def get_initial(self): def get_initial(self):
"""The initial value for the form (which is a formset here).""" """The initial value for the form (which is a formset here)."""
nameservers = self.object.nameservers nameservers = self.object.nameservers
@ -248,7 +255,6 @@ class DomainNameserversView(DomainFormBaseView):
def get_form(self, **kwargs): def get_form(self, **kwargs):
"""Override the labels and required fields every time we get a formset.""" """Override the labels and required fields every time we get a formset."""
formset = super().get_form(**kwargs) formset = super().get_form(**kwargs)
for i, form in enumerate(formset): for i, form in enumerate(formset):
form.fields["server"].label += f" {i+1}" form.fields["server"].label += f" {i+1}"
form.fields["ip"].label += f" {i+1}" form.fields["ip"].label += f" {i+1}"
@ -261,6 +267,8 @@ class DomainNameserversView(DomainFormBaseView):
def form_valid(self, formset): def form_valid(self, formset):
"""The formset is valid, perform something with it.""" """The formset is valid, perform something with it."""
self.request.session['nameservers_form_domain'] = self.object
# Set the nameservers from the formset # Set the nameservers from the formset
nameservers = [] nameservers = []
for form in formset: for form in formset: