@0ldn0mad

Как обработать данные из формы Django?

Делаю собственный проект - параллельно изучаю Django.
Цель проекта: Сделать удобный механизм нарезки IP-сетей под необходимые маски. Вести учет (картотеку) использования нарезанных подсетей.
Как исходные данные имею три модели:
1) Список подсетей, которые надо будет делить на мелкие
5f9dcc4a7ea36810140941.png
2) Список масок, которыми надо будет нарезать какую-то одну сеть из модели выше
5f9dcccc28850823933533.png
3) Таблица готовых подсетей, которые образовались после резки сети из пункта 1 маской подсети выбранной из пункта 2. Далее, эти подсети будут раздаваться и учитываться.
5f9dce86ef4d2012362471.png
По мере того как будут заканчиваться подсети из пункта 3, они снова будут наращиваться нарезкой сетей из пункта 1 выбранной маской из пункта 2.
Делаю форму, в которой указывается сеть, которая будет резаться с выпадающим списком предлагаемых масок.
from django import forms
from mask.models import Mask


class SawnetForm(forms.Form):
    ip_lan_24 = forms.CharField(
        max_length=50,
        label='Введите подсеть класса C, которую будем делить ',
        widget=forms.TextInput(attrs={
            "class": "form-control",
            "placeholder": "AAA.BBB.CCC.DDD",
        })
    )
    mask = forms.ModelChoiceField(
        queryset=Mask.objects.all(),
        label='Маска ',
        empty_label='Выберите маску',
        widget=forms.Select(attrs={
            "class": "form-control",
        })
    )


А вот во вьюхе не знаю как описать действие

from django.shortcuts import render
from .forms import SawnetForm
# Create your views here.


def sawnet(request):
    if request.method == 'POST':
        pass
    else:
        form = SawnetForm()


По идеи мне нужно как-то соблюсти взаимосвязь - если, допустим, выбрали подсеть с маской "A.B.C.D/27 - 255.255.255.224 - 30 хостов", то в этой же строке мне надо как-то в переменную посадить значение из этой же строки - /27
Потом применить метод ipaddress и т.д.

Вот сейчас и застрял на том, как при выборе в форме каких-то данных из выпадающего списка, взять данные из другого поля выбранной строки в переменную?
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
@buslay
Во вью можно использовать специальный класс для работы с формой - CreateView.

В этом view можно переопределить логику метода form_valid, создавать объект таблицы готовых подсетей. В этом методе будут доступны данные сохраненной и проверенной формы.

Можно вместо переопределения метода form_valid использовать метол save в форме SawnetForm, например так:
def save(self, commit=True):
    instance = super(SawnetForm, self).save(commit=False)
    # тут логика получения данных для сохранения в БД
    if commit:
        ReadySubnets.objects.update_or_create(
            ip_net=self.cleaned_data['ip_lan_24'],
            mask=self.cleaned_data['mask'],
        )
    return instance
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы