Как использовать функцию в другом классе и модифицировать ее Django

Суть, нужно использовать функцию в другом классе без потери модели и при этом иметь возможность изменить функцию (не важно, я могу переписать func в более гибкую func). Не могу решить этот вопрос уже как минимум 10 часов. Гугл не помог =( Знаю, что код немного грязный, буду чистить :D

У меня один заголовок с формой и другая форма на всех страницах

Не волнуйтесь

class head(View):
    template_name = "dental/mainpage.html"
    model = signup
    def get(self,request):
        if request.method == 'GET':
            form = UserSign
            return render(request, "dental/mainpage.html", {"form": form})
    def FormSign(self,request):
        if request.method == 'POST':
            form = UserSign
            if form.is_valid():
                body = {
                    'Name': form.cleaned_data['Name'],
                    'email': form.cleaned_data['email'],
                    'Number': form.cleaned_data['Number'],
                }
                info_user = "\n".join(body.values())
                send_mail(
                    'Sign',
                    info_user,
                    'eric1122221@mail.ru',
                    ['eric1122221@mail.ru'],
                    fail_silently=False) 
                return render(request, "dental/mainpage.html", {"form": form})   #self.template_name
            return render(request, "dental/mainpage.html", {"form": form})                     

class stockpage(ListView):
    template_name = "dental/stocks.html"
    model = stock
    context_object_name = "stocks"

Попробуйте добавить отдельное представление для обработки формы со скрытым полем для url для перенаправления. Django's default auth views работает подобным образом. Также пользовательский контекстный процессор может помочь предоставить форму для всех страниц без переопределения всех их get или get_context_data методов.

Рассмотрим пример:

forms.py:

class MyForm(forms.Form):
    next = forms.CharField(widget=forms.HiddenInput, required=False)
    name = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

context_processors.py:

def my_form_context_processor(request):
    my_form = MyForm()
    my_form.fields['next'].initial = request.get_full_path()
    return {'my_form': my_form}

settings.py:

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'my_app.context_processors.my_form_context_processor',
            ],
        },
    },
]

views.py:

class MyFormView(FormView):
    form_class = MyForm
    template_name = 'my_form.html'

    def form_valid(self, form):
        # ...
        success_url = form.cleaned_data.get('next')
        if not success_url:
            success_url = reverse('my_app:home')  # default
        return HttpResponseRedirect(success_url)


class ViewA(TemplateView):
    template_name = 'template_a.html'


class ViewB(TemplateView):
    template_name = 'template_b.html'

template_a.html:

{% include "my_form.html" %}

<h1>A</h1>

template_b.html:

{% include "my_form.html" %}

<h1>B</h1>

my_form.html:

<form action="{% url 'api:my_form' %}" method="POST">
    {% csrf_token %}
    {{ my_form.as_p }}
    <p><input type="submit" value="Go!"></p>
</form>
Вернуться на верх