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):
# 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
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?
hostname = ""
# # TODO: pass hostname from view?
# Call the IP validation method from Domain
try:
Domain.checkHostIPCombo(hostname, ip_list)
except NameserverError as e:
raise forms.ValidationError(str(e))
# hostname = self.form.cleaned_data.get("server", "")
# print(f"hostname {hostname}")
# # 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):
@ -51,7 +53,58 @@ class DomainNameserverForm(forms.Form):
label="IP address",
strip=True,
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(

View file

@ -14,6 +14,7 @@ from django.shortcuts import redirect
from django.template import RequestContext
from django.urls import reverse
from django.views.generic.edit import FormMixin
from django.forms import BaseFormSet
from registrar.models import (
Domain,
@ -213,12 +214,18 @@ class DomainDNSView(DomainBaseView):
template_name = "domain_dns.html"
class DomainNameserversView(DomainFormBaseView):
class DomainNameserversView(DomainFormBaseView, BaseFormSet):
"""Domain nameserver editing view."""
template_name = "domain_nameservers.html"
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):
"""The initial value for the form (which is a formset here)."""
nameservers = self.object.nameservers
@ -247,8 +254,7 @@ class DomainNameserversView(DomainFormBaseView):
def get_form(self, **kwargs):
"""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):
form.fields["server"].label += f" {i+1}"
form.fields["ip"].label += f" {i+1}"
@ -261,6 +267,8 @@ class DomainNameserversView(DomainFormBaseView):
def form_valid(self, formset):
"""The formset is valid, perform something with it."""
self.request.session['nameservers_form_domain'] = self.object
# Set the nameservers from the formset
nameservers = []
for form in formset: