Как получить данные из форм в наборе форм, в то время как набор форм не валидируется из django admin custom actions interim form page
Я не знаю, как получить обновленные поля из форм в наборе форм в отдельные сообщения, потому что набор форм никогда не является действительным.
Я уже пробовал "for form in formset" внутри и вне form.is_valid() с .get['field'], .get('field') и cleaned_data.
на промежуточной странице действий администратора пользователь должен иметь возможность видеть и редактировать начальные значения формы, а при отправке сообщения должны быть отправлены сообщения с обновленными или не обновленными значениями формы на нужную почту. Но набор форм никогда не является действительным. Это из-за того, как функционируют действия администратора или что происходит?
¨ forms.py
class ReviewRequestTemplate(forms.Form):
emailtemplate = forms.CharField(widget=forms.Textarea)
employers_email = forms.EmailField()
review_link = forms.CharField()
subject = forms.CharField()
admin.py
class EmployerAdmin(TranslationAdmin):
list_display = ('name', 'website', 'review_request_sent',)
actions = ['request_review',]
def request_review(self, request, queryset):
RequestTemplateFormset = formset_factory(ReviewRequestTemplate, extra=0)
#formset initial is a list comprehension
#for employer in queryset
formset = RequestTemplateFormset(initial=[{'emailtemplate': f"Hello {employer.name} Review our servie right NOW! Here is your link:",'employers_email':employer.email, 'review_link':get_current_site(request).domain +reverse('review', kwargs={'uidb64': urlsafe_base64_encode(force_bytes(employer.pk)), 'token':account_activation_token.make_token(employer)}), 'subject':'Please let us better our services'} for employer in queryset])
if request.POST.get('post'):
formset = RequestTemplateFormset(request.POST)
if formset.is_valid():
print('valid')
message = f"email:{form.get('employers_email')}, subject:{form.get('subject')}, message: {form.get('emailtemplate') + form.get('review_link')}"
queryset.update(review_request_sent=True)
else:
print('not valid')
all_sent = request.POST.items()
return HttpResponse(all_sent)
else:
context = {
'title': "Are you sure?",
'queryset': queryset,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
'formset': formset
}
return TemplateResponse(request, 'admin/requestreview.html', #TemplateResponse
context)
request_review.short_description = "Send review requests"
html
{% extends "admin/base_site.html" %}
{% load i18n l10n %}
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ formset.errors }}
<p>The following videos will be accepted:</p>
<ul>{{ queryset|unordered_list }}</ul>
<div>
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" />
{% endfor %}
<input type="hidden" name="action" value="request_review" />
<input type="hidden" name="post" value="yes" />
<input type="submit" value="{% trans "Yes, I'm sure" %}" />
</div>
{%for form in formset%}
{{form.as_p}}
{%endfor%}
</form>
{% endblock %}