#python #django
#python #django
Вопрос:
У меня возникли проблемы с загрузкой изображения в форму с помощью Django. Файл не отображается в моем каталоге templates / auctions и не отображается в моем шаблоне (вероятно, потому, что он никогда не загружался).
В моем views.py
:
@login_required(login_url="login")
def createListing(request):
if request.method == "POST":
filled_form = CreateListing(request.POST, request.FILES)
if filled_form.is_valid():
user = User.objects.get(username=request.user)
new_listing = filled_form.save(commit=False)
new_listing.listed_by = user
new_listing.save()
return HttpResponseRedirect(reverse("index"))
else:
context = {
"createlistingform": filled_form
}
else:
context = {
"createlistingform": CreateListing()
}
return render(request, "auctions/createlisting.html", context)
Я попытался повторить подход в разделе «Передача загрузок с файлом», и он все еще не работает.
В моей AuctionListing
модели models.py
есть это поле:
image = models.ImageField(blank=True, upload_to="images/")
и мой файл проекта settings.py
имеет такую конфигурацию:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Является ли моя commit=False
проблема в views.py
создании проблемы?
Комментарии:
1. Я вижу, я позаботился о том, чтобы заполнить свое
listed_by
полеUser
моделью в ‘views.py » и вы предполагаете , что я должен сделать то же самое для своейimage
области , поскольку у меня есть опция » полеblank=True
» ?
Ответ №1:
По ссылке, которой вы поделились,
Обратите внимание на этот запрос.ФАЙЛЫ будут содержать данные только в том случае, если метод запроса был POST, по крайней мере, одно поле файла было фактически опубликовано, а отправленный запрос имеет атрибут enctype=»multipart/ form-data». В противном случае запрос.ФАЙЛЫ будут пустыми.
Также используйте commit = False, когда вы получаете большую часть данных вашей модели из формы, но вам нужно заполнить некоторые поля null= False данными, не относящимися к форме.
Комментарии:
1. По-видимому, у my
request.FILES
нет ключей, поэтому нет способа вручную заполнитьimage
поле.2. Выполнена составная часть / часть данных формы?
Ответ №2:
Понял, в моей форме createlisting.html
отсутствовал тип кодировки.
<form enctype="multipart/form-data" action="{% url 'createlisting' %}" method="post">
{% csrf_token %}
{{ createlistingform }}
<input type="submit">
</form>
Это устранило проблему!