Как использовать функцию в другом классе и модифицировать ее 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>