Изображение не хранится в папке media в Django, но в базе данных содержится имя изображения

views.py

  employee = Employee.objects.create(
user=request.user,  # Assigning the current user
first_name=request.POST.get('employee_firstname'),
middle_name=request.POST.get('employee_middlename'),
last_name=request.POST.get('employee_lastname'),
email=request.POST.get('employee_email'),
land_phone_number=request.POST.get('employee_landphone'),
mobile_phone_number=request.POST.get('employee_mobile'),
gender=request.POST.get('gender'),
hire_date=request.POST.get('hire_date'),
position=position,
address=address,
date_of_birth=request.POST.get('dob'),
img=request.FILES.get('imgg'),  # Make sure you're using request.FILES for image files

)

models.py

class Employee(models.Model):
img = models.ImageField(upload_to='pics')

settings.py

    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),

]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

`# Определите URL-адрес носителя

`MEDIA_URL = '/media/'

urls.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

add_user.html

<div class="contact-img">
<input type="file" id="imgg" name="imgg" class="form-control" accept="image/*">

list.html

<img src="{{ datas.employee.img.url }}" alt="User Avatar" class="user-avatar">

«Почему это не сохраняется в папке media/pics?»

теперь работает после обновления views.py вот так

img_file = request.FILES.get('imgg')
     try:
     employee = Employee.objects.create(
     img=img_file


 employee.save()  # This should trigger the print/log statements

list.html

{% if datas.employee.img %}
            <img src="{{ datas.employee.img.url }}" alt="User Avatar" class="user-avatar">
        {% else %}
            <img src="{% static 'path/to/default/image.png' %}" alt="Default Avatar" class="user-avatar">
        {% endif %}

enter code here

В корневом settings.py файле вашего проекта

STATIC_URL = 'static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

В корневом urls.py файле вашего проекта

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
      # app URLs comes here
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

В вашем приложении models.py файл

import uuid

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import gettext_lazy as _

def upload_to(instance, filename):
    return '/'.join([str(instance), filename])



class TimeStampedModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True


class User(AbstractUser, TimeStampedModel):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    first_name = models.CharField(max_length=255, null=True, blank=True)
    last_name = models.CharField(max_length=255, null=True, blank=True)
    full_name = models.CharField(max_length=255, null=True, blank=True)
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=255, unique=True)
    password = models.CharField(max_length=255, null=True, blank=True)
    reset_key = models.CharField(max_length=255, null=True, blank=True)
    profile_image = models.ImageField(upload_to=upload_to, null=True, blank=True)

Теперь вот как локальный сервер обслуживает ваши изображения:

BASE_URL = http://0.0.0.0:8003

user = User.objects.get(email=email)
if user.profile_image:
   profile_image = BACKEND_BASE_URL + user.profile_image.url

теперь profile_image содержит image_url серверы вашего изображения, вот как выглядит ваш URL:

"profile_image": "http://0.0.0.0:8003/media/b5e6abad-9943-40b0-af14-c6642b8af955/photo-1726706805887-0ac0e0d3a721"

Примечание: если ваш сервер работает на localhost, то вы можете использовать 127.0.0.1

Добавили ли вы атрибут enctype="multipart/form-data" в тег формы, если нет, то добавьте этот.

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