Django Forms загружает изображение - данные формы работают, кроме изображения
Я пытаюсь заставить загрузку работать с Джанго. Я не получаю сообщение об ошибке при попытке загрузить его, и новый элемент сохраняется, но изображение отсутствует. Другие данные формы все там. Я гуглил и переполнял стек последние 2 дня и не могу найти решение. Я даже не знаю, где это идет не так! Любой совет будет удивительным. Спасибо.:)
из views.py:
if request.method == 'POST':
form = ItemForm(request.POST, request.FILES, user=request.user, forsale=True)
if form.is_valid():
new_item = form.save()
return item_view(request, marketplace_id, new_item.id)
else:
form = ItemForm(user=request.user)
из models.py:
class Item(models.Model):
photo = StdImageField(upload_to='images/', blank=True, size=(500, 500, True), thumbnail_size=(210, 150, True))
user = models.ForeignKey(User)
...
def __unicode__(self):
return self.name
class ItemForm(ModelForm):
class Meta:
model = Item
fields = ['name', 'description', 'price', 'shipping', 'photo', 'section']
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('user')
super(ItemForm, self).__init__(*args, **kwargs)
из шаблона:
<form enctype="multipart/form-data" action="" method="post" data-ajax="false">{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper" data-role="fieldcontain">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" value="Save">
</form>
На мой взгляд, шаблон правильный. Модель Item выглядит хорошо, StdImageField - это оболочка для ImageField. Работает нормально в админке. Форма, кажется, тоже хорошо, ничего особенного. В моем представлении views.py я проверяю POST-запрос, вызываю ItemForm и передаю request.POST и request.FILES (и forsale, который является логическим). Я проверяю, является ли форма действительной, если да, я сохраняю ее. Почему это не работает? Элемент сохранен, но в панели администратора нет файла, связанного с фотографией.
1 ответ
Убедитесь, что параметр MEDIA_ROOT, объединенный с "images/", является допустимым и записываемым путем для процесса Django.
Также с помощью pdb
import pdb; pdb.set_trace()
может помочь вам в процессе поиска проблемы (например, посмотрите на запрос. ФАЙЛЫ, чтобы увидеть, все ли хорошо там во время публикации).