Сохранение загруженного файла в Django, HTML
Я не использую template form. Я передаю через регистрационную форму имя, фамилия, и мэйл, и прикрепленный файл. У меня получилось сохранить все данные кроме прикрепленного файла.
вот форма index.html
<form action="{% url 'home' %}" method="POST">
{% csrf_token %}
<div class="form-row">
<div class="col-12 col-md-9 mb-2 mb-md-1">
<input type="text" class="form-control form-control-lg" placeholder="Имя" name="first_name">
</div>
<div class="col-12 col-md-9 mb-2 mb-md-1">
<input type="text" class="form-control form-control-lg" placeholder="Фамилия" name="last_name">
</div>
<div class="col-12 col-md-9 mb-2 mb-md-1">
<input type="text" class="form-control form-control-lg" placeholder="Номер телефона" name="phone_number">
</div>
<div class="col-12 col-md-9 mb-2 mb-md-1">
<input type="email" class="form-control form-control-lg" placeholder="Электронная почта" name="email">
<input type="hidden" name="P" value="S">
</div>
<div class="col-12 col-md-9 mb-2 mb-md-1">
<input type="file" class="form-control-file btn-secondary btn-lg btn-block" placeholder="Вложите файл" name="file">
</div>
<div class="col-12 col-md-9 mb-2 mb-md-1">
<button type="submit" class="btn btn-block btn-lg btn-primary">Зарегистрироваться!</button>
</div>
</div>
</form>
Вот мой views.py, мне кажется я не правильно передаю загруженные файлы
def index(request):
if request.method == 'POST':
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
phone_number = request.POST.get('phone_number')
email = request.POST.get('email')
status = request.POST.get('P')
files = request.POST.FILE('file')
print(first_name,last_name,phone_number,email,status,files)
s=UserReg(first_name=first_name,last_name=last_name,phone_number=phone_number,email=email, status=status, presentation = files)
s.save()
return render(request, 'index.html')
и вот мои модели
def upload_my_file(instance, filename):
return '/'.join((instance.presentation.first_name,filename))
class UserReg(models.Model):
CHOICES = (
('P', 'Участник'),
('S', 'Выступающий')
)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
phone_number = models.CharField(max_length=15)
email = models.EmailField(max_length=30)
status = models.CharField(max_length=100, choices=CHOICES, default='P')
def __str__(self):
return self.first_name
class DownloadedFiles(models.Model):
presentation = models.ForeignKey(UserReg, on_delete=models.CASCADE, verbose_name='Презантация')
source_file = models.FileField(upload_to= upload_my_file, verbose_name='Файл')
class Meta:
verbose_name_plural = 'Презентации'