Изображение в 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})