#python #django #django-models #django-views #modelchoicefield
Вопрос:
У меня есть простая модель для моих csv-файлов:
#models.py class csvModel(models.Model): csvFileName = models.CharField(max_length=50) csvFile = models.FileField(upload_to='tpData/csv/')
Мой скрипт позволяет пользователю загружать файл
Затем я использую поле выбора модели, которое позволяет пользователю выбрать один из загруженных файлов:
#forms.py class convertForm(forms.Form): fileToConvert = forms.ModelChoiceField(queryset=csvModel.objects.all(), label="Choose a CSV file to convert")
При вызове is_valid()
я могу получить доступ к значению поля Modelchoic (например, если мой csv-файл называется test1, я получу test1)
#forms.py def clean_fileToConvert(self): print(self.cleaned_data.get("fileToConvert")) #I get the name of the field (what I want)
Но когда я пытаюсь получить доступ к этому значению чуть ниже is_valid()
, я получаю число (например, 48 для файла, 49 для следующего и т. Д.)
#views.py form2 = convertForm(request.POST) if form2.is_valid(): print(request.POST.get("fileToConvert")) #I get 48
Я даже пытался return self.cleaned_data.get("fileToConvert")
использовать функцию очистки, но она не работает, я не знаю, как получить доступ к выбранному имени файла, URL-адресу и т.д.
Комментарии:
1. Используйте
form2.cleaned_data.get("fileToConvert")
, данные ЗАПИСИ содержат необработанный pk, и поле формы преобразует его в экземпляр при очистке/проверке2. Спасибо @IainShelvington, это сработало, так что я всегда должен использовать cleaned_data при доступе к значениям формы в представлениях после их очистки ?
3. Да, form.cleaned_data-это почти всегда то, что вы хотите использовать. Он будет содержать данные, которые были очищены/проанализированы/преобразованы в полезное значение