Django3 передача нескольких файлов в базу данных
На самом деле у меня была идея сделать приложение, в котором можно было бы загружать сразу большое количество файлов, но у меня возникли некоторые трудности с тем, как реализовать это на модели, и пока что мне нужна помощь.
Я получаю Эти ошибки
Вот мой Models.py
class GoCustomerRegistration(models.Model):
name = models.CharField(max_length=300, verbose_name='Full name')
type = models.CharField(max_length=20, verbose_name='Customer Type')
destination = models.CharField(max_length=30, null=False, verbose_name='Destination')
time_of_submission = models.DateTimeField(auto_now_add=True, null=False)
registered_by = models.ForeignKey(GoUser, on_delete=models.CASCADE)
age = models.IntegerField(verbose_name="Age", null=False)
photo = models.ImageField(max_length=10000, verbose_name='Customer Picture',
default='profile1.png', upload_to='customers/profiles/')
documents = models.FileField(max_length=1000, verbose_name='Documents',
null=False, default=None,
upload_to=f'customers/files/%Y/%m/%d')
class Meta:
ordering = ["time_of_submission"]
def __str__(self):
return '%s --- %s' % (self.name, self.documents)
Мой Views.py
def send_files(request):
context = {}
if request.POST:
form = GoCustomerRegistrationForm(request.POST)
if form.is_valid:
form.save()
return redirect('preview')
else:
HttpResponse(f'Invalid data { request.user.username }')
context['document_form'] = form
else:
form = GoCustomerRegistrationForm
context['document_form'] = form
return render(request, 'files.html', context)
my urls.py
path('upload', send_files, name='upload'),
my 'forms.py
class GoCustomerRegistrationForm(forms.ModelForm):
class Meta:
model = GoCustomerRegistration
fields = ('name', 'type', 'destination', 'age', 'photo', 'documents')
TYPE_CHOICES = (
('', 'Select a customer type'),
('student', 'STUDENT'),
('worker', 'WORKER'),
('tourist', 'TOURIST'),)
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control form-control-user'}),
'age': forms.TextInput(attrs={'class': 'form-control form-control-user'}),
'type': forms.Select(choices=TYPE_CHOICES, attrs={'class': 'form-control form-control-user'}),
'destination': forms.TextInput(attrs={'class': 'form-control form-control-user'}),
'photo': forms.ClearableFileInput(
attrs={'multiple': True, 'class': 'btn btn-primary d - block btn - user w - 100'}),
'documents': forms.ClearableFileInput(
attrs={'multiple': True, 'class': 'btn btn-primary d - block btn - user w - 100'}),
}
Если вы хотите присвоить несколько файлов одной модели, вам следует создать отдельную модель и сделать FK между ними. Например, для фото:
class GoCustomerRegistration(models.Model):
...
class CustomerPhoto(models.Model):
photo = models.ImageField(upload_to='customers/profiles/')
Теперь каждый клиент может иметь несколько фотографий
Теперь для загрузки нескольких изображений в шаблон можно использовать InlineFormSet
. Документы в https://docs.djangoproject.com/en/3.2/topics/forms/modelforms/#inline-formsets