ModelChoiceField возвращает число вместо его значения

#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-это почти всегда то, что вы хотите использовать. Он будет содержать данные, которые были очищены/проанализированы/преобразованы в полезное значение