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

Вернуться на верх