Почему django не создает мой медиа каталог через мою форму обновления, но работает нормально, когда используется панель администратора?

Я пытаюсь загрузить фотографию профиля и она работает нормально при использовании панели администратора, но при использовании формы моего шаблона она выдает неправильный путь (я знаю это, потому что я отобразил ее, чтобы проверить url), как это...

<p>{{user.userprofile.profile_image.url}}</p>

вывод на html-странице: /media/check.png когда вместо этого должно быть: /media/images/check.png

Примечание: все остальное работает нормально на моей форме, и она даже показывает, что url изображения был обновлен в панели администратора, но показывает только имя изображения, а не (images/img_name.png), как должно быть

Форма:

       <form method="post" action="{%url 'profile-view' username=user.username%}" enctype="multipart/form-data" class="myOverlayForm">
                  {%csrf_token%}
                  <label for="id_profile_image">Profile Image: <i class="fa fa-upload" style="font-size: 30px;"></i></label>
                  <input type="file" name="profile_image" accept="image/*" id="id_profile_image">
                  <div class="form-group">
                    <label for="bioInput">Bio: </label>
                        {%if form.errors%}
                        <div class="alert alert-warning alert-dismissible fade show my_error" role="alert">
                            <strong>{{form.errors.bio}}</strong> 
                            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        {%endif%}
                        <div class="form-group">
                        </div>
                        <input type="text" class="form-control" name="bio"  maxlength="150" minlength="25" id="id_bio">
                        <small id="bioHelp" class="form-text text-muted">Please avoid to putting out very personal information.</small>
                    </div>
                    <div class="form-group">
                        <label for="bioInput">Age:</label>
                        <input type="number" class="form-control" name="age" placeholder="Enter Age">
                        <small id="ageHelp" class="form-text text-muted">Note that this has nothing to do with age restriction, CLASSY is available to everyone☺.</small>
                    </div> 
                    <button type="submit" name="update_profile_details" class="btn btn-block btn_update">Update</button>
                </form>

функция просмотра: views.py

>

def profile_view(request,username):
    try:
        profileForm = UpdateUserProfile()
        if request.method == 'POST':
            profileForm = UpdateUserProfile(request.POST , request.FILES)
            user = User.objects.get(username=username) 
            if profileForm.is_valid():
                if profileForm.cleaned_data['bio'] == "":
                       profileForm.cleaned_data['bio'] = "No bi4o..."
     updated_user = UserProfile.objects.filter(user=user).update(
                    bio=profileForm.cleaned_data['bio'],
                    age=profileForm.cleaned_data['age'],
                    profile_image=profileForm.cleaned_data['profile_image'])
     
        return render(request,"classy_main/profile.html",{"form":profileForm})
    except Exception as exc:
          print(exc)
          

settings.py:

BASE_DIR = Path(__file__).resolve().parent.parent

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT =  os.path.join(BASE_DIR, 'media')

urls.py:


from django.contrib import admin
from django.urls import path , include
from register  import views as v
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [ 
    path('admin/', admin.site.urls),
    path("register/",v.register, name='register'),
    path("", include("classy_main.urls")),
    path("",include("django.contrib.auth.urls"))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

models.py:

class UserProfile(models.Model):
    user = models.OneToOneField(User,null=True,on_delete=models.CASCADE,related_name="userprofile")
    bio = models.TextField(max_length=150,null=True,blank=True)
    age = models.IntegerField(null=True,blank=True)
    profile_image = models.ImageField(upload_to='images',default='classy_main/images/default-img.jpg',blank=True)
    def __str__(self):
        return f"{self.user} - {self.bio}"

forms.py:

class UpdateUserProfile(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ("bio","age","profile_image")

Вот весь код, который должен сделать загрузку изображения возможной. Если потребуется дополнительная информация, я буду рад предоставить ее.

Любая помощь или предложение будут очень признательны, пожалуйста!!!

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