Доступ к очищенным данным из админки django для обработки pdf
Здравствуйте, я довольно новичок в django, так что, пожалуйста, будьте добры, если что-то покажется вам новичком. В настоящее время я пытаюсь добавить кнопку печати в каждое существующее представление проекта в админке django, чтобы она зависела не от одной модели, которую я мог бы разрешить вручную для печати, а от каждой существующей модели, которая содержит внешние ключи к другим моделям и так далее. Для простоты я подумал, что лучше всего будет просто получить очищенные данные формы и обработать их для pdf.
Я уже добавил кнопку печати, путь url и так далее, и он создаст для меня pdf файл.
Что я не могу сделать, так это получить доступ к очищенным данным формы из моего класса BaseAdmins (расширяет ModelAdmin) следующим образом:
form = BaseForm(request.POST)
if form.is_valid():
data = form.cleaned_data
Он просто выдаст мне случайные ошибки, например у объекта нет атрибута 'is_bound'. Поэтому я думаю, что в целом я ошибаюсь с контекстом, в котором я пытаюсь получить очищенные данные из формы. Каждый учебник, который я нашел, просто показывает, как получить данные, но не полностью решает, содержит ли он внешние ключи и не в каком контексте.
Не могли бы вы прояснить для меня, где имеет смысл передавать какие-либо данные формы, возможно, как данные сессии или тело сообщения в представление печати, где я могу их обработать.
Большое спасибо за прочтение, надеюсь, я смог описать свою проблему, не стесняйтесь спрашивать.
Edit Это BaseForm, я изменил имена переменных по внутренним причинам:
class BaseForm(ModelForm):
def clean_custom(self):
another_model = self.cleaned_data.get('AnotherModel')
custom_models = self.cleaned_data.get('CustomModel')
custom_models_allowed = CustomModel.objects.filter(AnotherModel=another_model)
custom_models_was_list = True
if not custom_models:
return
if not isinstance(custom_models, Iterable):
custom_models_was_list = False
custom_models = [custom_models]
for custom_model in custom_models:
if another_model and custom_model not in custom_models_allowed:
custom_models_allowed = [custom_model.titel for custom_model in custom_models_allowed]
custom_models_allowed = ', '.join(custom_models_allowed)
raise ValidationError('{} is not part of {}. For selection: {}'.format(custom_model, another_model, custom_models_allowed))
if custom_models_was_list:
return custom_models
else:
return custom_models[0]
Это не стандартный формат вопроса, вы должны предоставить нам код для части кода, где происходит ошибка, (т.е. файл base_admin.py), но то, что вы предоставили, это только 3 строки из него.
Но пока я вижу, что вы не проверяете, имеет ли запрос тип post или нет. Обратите внимание на условие if в начале метода
def edit(request):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = PurposeForm(request.POST)
# check whether it's valid:
if form.is_valid():
for key, value in form.cleaned_data.items():
# etc