Загрузка файлов/изображений в Django не отвечает

Я просмотрел около 8 руководств на YouTube и веб-сайтах в Интернете. Я считаю, что все настроено правильно. Однако, когда мои объекты создаются, он не создает медиа директорию или не сохраняет файлы. Я сделал файл настроек, урлы, представления, модели все. Любой совет будет высоко оценен Вот мои файлы:

// setting.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

// models.py
class Trip(models.Model):
    city = models.CharField(max_length= 255)
    country = models.CharField(max_length= 255)
    description = models.CharField(max_length= 255)
    creator = models.ForeignKey(User, related_name = 'trips_uploaded',on_delete= CASCADE, null=True)
    favoriter = models.ManyToManyField(User, related_name= 'fav_trips')
    photo = models.ImageField(null=True, blank =True, upload_to='trips')

// urls.py ( there were 2 ways to write media according to tutorial)
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('travelsiteapp.urls'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

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

// views.py (lastly)
def tripAdd(request):
    form = TripForm()
    if request.method == 'POST':
        form = TripForm(request.POST, request.FILES)
        if form.is_valid():
            form.photo = form.cleaned_data["photo"]
            form.save()

    context = { 'form': form}
    return render(request, 'tripAdd.html', context)


// I have hit all the steps not sure whats wrong? & and installed pip pillow

В вашей модели forms.py нет необходимости воссоздавать существующие поля из вашей модели.

class TripForm(ModelForm):
     # city = forms.TextInput()
     # country = forms.TimeField()
     # description = forms.Textarea()
     # photo = forms.ImageField()
     # The above is not necessary here...

     class Meta:
          model = Trip
          # These it should be since the model does have these fields
          fields = ['city', 'country', 'description', 'photo'] 

Однако, в вашем файле views.py в методе tripAdd, в той строке, где я вижу у вас form.photo = form.cleaned_data['photo'], это также не нужно. Просто закомментируйте/удалите эту строку и просто вызовите метод save на форме.

form = TripForm(request.POST, request.FILES)
if form.is_valid():
# form.photo = form.cleaned_data["photo"]
form.save()

Дополнительно, я бы предложил использовать / при работе с папками в качестве лучшей практики.

В модели Trip:

photo = models.ImageField(upload_to='trips/', null=True, blank =True)

В urls.py проекте добавьте следующее:

urlpatterns = [
     path('admin/', admin.site.urls),
     path('', include('travelsiteapp.urls'))
] # + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# Adding the media url/path if Debug is true
if settings.DEBUG:
     urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
Вернуться на верх