Джанго проблемы с использованием формы изображения - PullRequest
0 голосов
/ 20 марта 2019

Я пытался создать страницу профиля для проекта, где пользователь может загрузить изображение профиля и некоторую базовую личную информацию, используя Django в качестве основы.

Кажется, что текстовая информация, которую я передаю в своем коде,работать, но я не могу заставить пользователя загрузить фотографию профиля со страницы профиля.Но если я зайду на страницу администратора django, я могу загрузить и отобразить фотографию профиля оттуда.Так что, кажется, что файл models.py работает, и проблема, похоже, в файле forms.py ... Я искал в сети некоторое время и различные туториалы, но, похоже, ничего не работает.Пожалуйста, помогите:)

файл models.py

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
email_confirmed = models.BooleanField(default=False)
image= models.ImageField(upload_to='profile_image', blank=True)

def __str__(self):
    return self.user.username

файл forms.py

class ProfileUpdateForm(forms.ModelForm):
YEARS= [x for x in range(1900,2021)]
birth_date = forms.DateField( initial="21-06-1995", widget=forms.SelectDateWidget(years=YEARS))
image = models.ImageField(upload_to='profile_image',blank=True)
class Meta:
    model = Profile
    fields = ('bio','birth_date','location','image')

файл views.py

@login_required
def profile_edit(request):
form = ProfileUpdateForm(request.POST)

if request.method == 'POST':

    if form.is_valid():
        user = request.user
        user.profile.bio = form.cleaned_data.get("bio")
        user.profile.birth_date = form.cleaned_data.get("birth_date")
        user.profile.location = form.cleaned_data.get("location")
        user.save()
        return redirect('profile')
    else:
        form = ProfileUpdateForm()

context = {
    'form' : form

}
return render(request, 'webside/profile_edit.html', context)

Статическийroot / url и Media root / url были реализованы в настройках, и я добавил статический URL в файл urls.py.Любая помощь будет принята с благодарностью:)

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Вы не сохранили свое изображение в поле зрения после публикации из объекта формы.Вы сохраняете это так, если форма верна

if 'image' in request.FILES:

            user.profile.image = request.FILES['image']
0 голосов
/ 20 марта 2019

Вы передаете в форму только данные, а не файлы:

form = ProfileUpdateForm(request.POST)

Измените на:

form = ProfileUpdateForm(data=request.POST, files=request.FILES)

И сохраните свою форму вместо назначения данных дляuser объект.Вы не сохраняете user.profile, когда делаете user.save():

profile = form.save(commit=False)
profile.user = request.user
profile.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...