Как сохранить фотографию, взятую из поля ImageField формы, в базе данных
#models.py
class Contact(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, unique=False)
photo = models.ImageField(upload_to='static/photos/', null=True, blank=True)
def __str__(self) -> str:
return f'{self.photo}, {self.name}'
#admin.py
@admin.register(Contact)
class ContactAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'photo']
#forms.py
class ContactForm(forms.Form):
name = forms.CharField(required=True, label='Name')
photo = forms.ImageField(required=False, label='Photo')
#views.py
def post(self, request:HttpRequest)->HttpResponse:
form = ContactForm(request.POST)
if form.is_valid():
Contact.objects.create(name=form.cleaned_data['name'], photo=form.cleaned_data['photo']).save()
А потом, когда я создал контакт с этой фотографией, в админпанели есть имя, но нет src фотографии. Кажется, что она не сохранилась.
В чем может быть проблема...?
Обновите свой HTML-шаблон, чтобы включить enctype="multipart/form-data"
в тег формы. Этот атрибут необходим для передачи данных файла.
<form method="post" enctype="multipart/form-data">
<!-- Your form fields here -->
</form>
В вашем представлении Django при обработке отправки формы обращайтесь к данным загруженного файла с помощью request.FILES
, а не просто request.POST
.
def post(self, request: HttpRequest) -> HttpResponse:
form = ContactForm(request.POST, request.FILES)
# the rest of the code
Используя request.FILES
, вы обеспечиваете правильную передачу и прием файловых данных в Django.