Изображение в django не загружается через форму

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

Вот моя модель

class Player(models.Model):
    name = models.CharField(max_length=30)
    surname = models.CharField(max_length=30)
    position = models.ForeignKey(Position,on_delete=models.CASCADE)
    shirt_number = models.IntegerField()
    team = models.ForeignKey(Team,null=True,on_delete=models.SET_NULL)
    image = models.ImageField(upload_to='images/players/')

Вот моя форма

class PlayerForm(forms.ModelForm):
    class Meta:
        model = Player
        exclude = ('team',)

Вот views.py

def team_detail(request,slug):
    team = get_object_or_404(Team, slug=slug)
    players = Player.objects.filter(team_id=team.id)
    if request.method == "POST":
        form = PlayerForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            return redirect('')
    else:
        form = PlayerForm()
    return render(request,'team_detail.html',{'team':team,'players':players,'form':form})

А вот файл шаблона

    <form method = "POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="SUBMIT">
    </form>

Перед подачей

После нажатия кнопки отправки

Вам необходимо указать enctype="…" атрибут [mdn] для правильного кодирования файла:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="SUBMIT">

В представлении вам также нужно будет указать значение для Team создаваемого экземпляра:

def team_detail(request,slug):
    team = get_object_or_404(Team, slug=slug)
    if request.method == 'POST':
        form = PlayerForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.team = team
            form.save()
            return redirect('name-of-some-view')
    else:
        form = PlayerForm()
    players = Player.objects.filter(team=team)
    return render(request,'team_detail.html', {'team':team,'players':players,'form':form})
Вернуться на верх