Django ImageField не загружается при отправке формы, но не генерирует никаких ошибок
У меня есть простое приложение, которое использует ImageField для загрузки и хранения фотографии. Я запускаю приложение локально. Форма отображается, как и ожидалось, и позволяет мне просмотреть и выбрать файл jpg. Затем она показывает выбранное имя файла рядом с кнопкой "Выбрать файл", как и ожидалось. Когда я отправляю форму, она сохраняет поля модели 'name' и обновляет 'keywords', но не сохраняет файл и не добавляет имя файла в базу данных. Никаких ошибок не возникает. Просматривая базу данных, я вижу новую добавленную запись, но колонка 'photo' пуста. Любая помощь будет оценена по достоинству.
settings.py:
MEDIA_ROOT = '/Users/charlesmays/dev/ents/ents/enrich/'
models.py:
class Enrichment(models.Model):
name = models.CharField( max_length=255, unique=True)
keywords = models.ManyToManyField(KeyWord, blank=True)
photo = models.ImageField(upload_to='enrichments/', null=True, blank=True)
views.py:
def EnrichmentUploadView(request):
if request.method == 'POST':
form = CreateEnrichmentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('index'))
else:
return render(request, 'createEnrichment.html', {'form':form})
else:
form = CreateEnrichmentForm()
return render(request, 'createEnrichment.html', {'form':form})
forms.py:
class CreateEnrichmentForm(forms.ModelForm):
class Meta:
model = Enrichment
fields = ('name', 'photo', 'keywords')
enctype="multipart/form-data"
Измените все это, тогда все должно работать...
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
-------
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
models.py
photo = models.ImageField(upload_to="enrichments/", default="")
И ваша шаблонная форма
<form action="" id="" method="" enctype="multipart/form-data">
------
</form>