Как сохранить фотографию, взятую из поля 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.

Вернуться на верх