Почему 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">×</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")
Вот весь код, который должен сделать загрузку изображения возможной. Если потребуется дополнительная информация, я буду рад предоставить ее.
Любая помощь или предложение будут очень признательны, пожалуйста!!!