Не сохраняется изображение в django forms

Рейтинг: 1Ответов: 1Опубликовано: 09.06.2023

Не понимаю почему после обработки формы где были заполнены все поля слетает поле image(пишет что нету значения), а все остальные поля сохраняются. Хотя в поле image я тоже добавлял значение.

views.py:

def signup(request):
    if 'id' in request.session:
        id_per = request.session['id']
        account = User.objects.get(login=id_per)
    else:
        account = User.objects.get(login="Test")
    
    if request.method == 'POST':
        form = SignForm(request.POST)
        if form.is_valid():
            try:
                User.objects.create(**form.cleaned_data)
                return redirect('/login/')
            except:
                form.add_error(None, 'Invalid')
    else:
        form = SignForm()
    context = {'account': account, 'form': form}
    return render(request, 'base/signup.html', context)

forms.py:

class SignForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['name', 'age', 'image', 'city', 'email', 'login', 'password', 'phone']

models.py:

class User(models.Model):
    name = models.CharField(max_length=30, verbose_name="Имя")
    age = models.IntegerField(verbose_name="Возраст")
    image = models.ImageField(upload_to='images/', verbose_name="Изображение")
    city = models.CharField(max_length=30, verbose_name="Город")
    email = models.EmailField(max_length=254, verbose_name="Email")
    login = models.CharField(max_length=30, verbose_name="login")
    password = models.CharField(max_length=30, verbose_name="Password")
    phone = models.CharField(max_length=20, verbose_name="Телефон")
    favorite = models.ManyToManyField("Project", verbose_name="Избранные проекты")
    
    def __str__(self):
        return self.name

html:

<div class="registration-cssave" >
  <form action="{% url 'signup'%}" class="registration-cssave__form" method = "post">
    <div class = "password regist-div _anim-items bottom"><a class = "form-a" >Регистрация</a></div>
    {% csrf_token %}
      {% for f in form %}
      <div class = "login form-group _anim-items bottom"><p><label class = "form-label" for="{{ f.id_for_label}}">{{f.label}}:  </label>{{f}}</p></div>
      <div class = "form-error">{{f.errors}}</div>
    {% endfor %}
    <div class = "field_button _anim-items bottom">
      <button class="login_button">Зарегистрироваться</button>
    </div>
  </form>
</div>

Ответы

▲ 0Принят

Попробуйте

form = SignForm(request.POST, request.FILES)

и не забудьте

<form action="{% url 'signup'%}" class="registration-cssave__form" method ="post" enctype="multipart/form-data">