В Django изображения не передаются из формы в базу данных
столкнулся со следующей проблемой. У меня есть таблица в базе данных для питомцев, в которой есть столбец petPhoto.
models.py:
class Pet(models.Model):
petChoices = [
('Кошка', 'Кошка'),
('Кот', 'Кот'),
('Собака', 'Собака'),
('Пёс', 'Пёс'),
]
pet = models.CharField(
max_length=6,
choices=petChoices,
default='Кошка')
petName = models.CharField(max_length=50)
petOwner = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
petBirthday = models.DateField()
petPhoto = models.ImageField(upload_to='pet-images', blank=True, null=True)
petBio = models.TextField(max_length=511)
При работе с HTML формой передаются все значения, кроме изображений (изображения сохраняются в папку, но в саму таблицу не попадают)
forms.py
class PetAddForm(ModelForm):
petChoices = [
('Кошка', 'Кошка'),
('Кот', 'Кот'),
('Собака', 'Собака'),
('Пёс', 'Пёс'),
]
pet = forms.ChoiceField(choices=petChoices)
petName = forms.CharField(max_length=50)
petBirthday = forms.DateField()
petBio = forms.CharField(max_length=511)
petPhoto = forms.ImageField()
class Meta:
model = Pet
fields = ['pet', 'petName', 'petBirthday', 'petBio', 'petPhoto']
html:
<div>
<form class="auth-form" method="post" id="pet_form" enctype="multipart/form-data">
{% csrf_token %}
<h1>Анкета питомца</h1>
<label for="id_pet">Ваш питомец:</label>
<select name="pet" id="id_pet">
<option value="Кошка" selected>Кошка</option>
<option value="Кот">Кот</option>
<option value="Собака">Собака</option>
<option value="Пёс">Пёс</option>
</select>
{% if form.errors.pet %}
<ul class="error-list">
{{form.errors.pet}}
</ul>
{% endif %}
<label for="id_petName">Кличка питомца:</label>
<input type="text" name="petName" class="vTextField" maxlength="50" required="" id="id_petName">
{% if form.errors.petName %}
<ul class="error-list">
{{form.errors.petName}}
</ul>
{% endif %}
<label for="id_petBirthday">День рождения питомца:</label>
<input type="date" name="petBirthday" required id="id_petBirthday">
{% if form.errors.petBirthday %}
<ul class="error-list">
{{form.errors.petBirthday}}
</ul>
{% endif %}
<label for="id_petBio">Интересная информация про питомца:</label>
<textarea name="petBio" cols="40" rows="10" class="vLargeTextField" maxlength="511" required="" id="id_petBio"></textarea>
{% if form.errors.petBio %}
<ul class="error-list">
{{form.errors.petBio}}
</ul>
{% endif %}
<input type="file" name="petPhoto" accept="image/*" id="id_petPhoto">
<input type="submit" value="Сохранить анкету" name="add-pet">
<a href="{% url 'home' %}">На главную</a>
</form>
</div>
views.py:
def addPetView(request):
# обработать хозяина питомца
if request.method == 'POST':
form = PetAddForm(request.POST, files=(request.FILES or None))
if form.is_valid():
fPet = PetAddForm(request.POST, request.FILES)
pet = form.cleaned_data['pet']
petName = request.POST.get('petName')
petOwner = CustomUser.objects.get(username = request.user.username)
petBirthday = request.POST.get('petBirthday')
petPhoto = request.POST.get('petPhoto')
petBio = request.POST.get('petBio')
fPet = Pet.objects.create(pet = pet, petName = petName, petOwner = petOwner, petBirthday = petBirthday, petPhoto = petPhoto,
petBio = petBio)
fPet.save()
return redirect('home')
else:
form = PetAddForm()
return render(request, 'add-pet.html', {'form': form})
Так же по views.py вопрос, как автоматически для каждого объекта в таблице Pet вставлять в поле хозяина пользователя, который отправил запрос? Для базы данных использую PostgreSQL