2017-02-20 29 views
-1

Я хочу, чтобы пользователь загружал изображение профиля на странице профиля, но он не хранит его в папке media/documents, и да, я поместил enctype = "multipart/form-data "в html-форме и метод - сообщение. Я новичок в Джанго поэтому, пожалуйста, предоставить простое решениеНевозможно загрузить изображение профиля в модели django

models.py

class User(models.Model): 
first_name=models.CharField(max_length=20) 
last_name=models.CharField(max_length=20) 
username=models.CharField(max_length=25, primary_key=True) 
password=models.CharField(max_length=15) 
email_id=models.CharField(max_length=30, default='NULL') 
profile_pic=models.ImageField(upload_to='profilepics/%Y/%m/%d/',height_field=200,width_field=200,default='') 

forms.py

class ProfilePicForm(forms.ModelForm): 
class Meta: 
    model=User 
    fields=['username','profile_pic'] 

views.py

def upload(request): 
if request.method == 'POST': 
    username=request.POST['username'] 
    m=User(username=username) 
    m.profile_pic=request.FILES['profile_pic'] 
    m.save() 
    return render(request,'LoginPage/done.html') 
else: 
    pic=ProfilePicForm() 
    return render(request,'AfterLogin/profile.html') 

HTML файл

<form method="POST" enctype="multipart/form-data" action="{% url 'LoginPage:upload' %}"> 
     {% csrf_token %} 
     <p>Upload your profile photo</p><br> 
     <input id="id_image" type="file" class="" name="image"> 
     <input type="hidden" name="username" value="{{ username }}"> 
     <input type="submit" value="Submit"/> 
    </form> 
+0

Это хорошая идея опубликовать код ошибки, когда что-то в одном коде не работает. – Jonatan

+0

Как настроен файл настроек? – Jonatan

+0

Ошибок нет. Он просто не сохраняет фотографии –

ответ

1

Посмотрите на это:

Need a minimal Django file upload example

Кроме того, попробуйте обмен ошибки вы получаете при попытке загрузить картинку.

+0

Спасибо за это, но после этого у меня просто одно сомнение.Когда файл загружается, как django знает, для какого пользователя это фотография? Он нигде не упоминается. За какой кортеж он сохранит фотографию? –

+0

у вас есть ImageField в пользовательской модели. В этом поле хранятся местоположение и имя изображения, например «/home/user/project/media/your_pic.jpg» или около того. И во время загрузки django всегда знает, какой пользователь отправил http-запрос. – sprksh

+0

Когда пользователь аутентифицируется на странице входа в систему, он перенаправляется на страницу профиля, где он должен загрузить изображение профиля. Будет ли django все еще знать в отношении того, какой пользователь он есть? –

0

Я думаю, вам было бы лучше использовать стандартную модель пользователя, созданную Django, которая уже имеет поля first_name, last_name, имя пользователя, пароль и адрес электронной почты. Затем вы создаете новую модель с OneToOneField с пользователем модели.

Если изображение загружается, и если вы получаете 404 при прямом обращении к URL-адресу изображения при запуске сервера, то вы забыли использовать изображение, которое вы должны делать, когда находитесь на стадии производства.

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

Что-то, как это должно работать:

modles.py

from django.contrib.auth.models import User  
class UserPicture(models.Model): 
     user = models.OneToOneField(User, on_delete = models.CASCADE) 
     picture = models.ImageField(upload_to='...') 

forms.py

class ProfilePicForm(forms.ModelForm): 
     class Meta: 
      model = UserPicture 
      fields=['profile_pic'] 

views.py

def your_view(request): 
    ... 
    if request.method == 'POST': 
     form = UserPicture(request.POST, request.FILES) 

     if form.is_valid(): 
      userprofile = form.save() 
      userprofile.user = request.user 
      userprofile.save() 

    ... 
+0

Я добавил эту часть в код. Как использовать модель User, предоставленную django, и что OnetoOne? Также, если возможно, расскажите, какие изменения я могу внести в свой код, чтобы заставить его работать? –