Как получить поле FileField из ModelFrom в представлениях django

В настоящее время я хочу отправить некоторые данные в мою базу данных, сделав следующее: Отправка документа в базу данных и каждый документ имеет внешний ключ из таблицы пользователей, т.е. каждый документ является ссылкой на автора (из другой таблицы), но это будет плохо для пользователя, чтобы получить всех пользователей в системе и выбрать одного из них, я хочу, чтобы назначение автора было выполнено в представлениях. Итак, в качестве резюме я хочу получить поля из формы в представлениях. Я нашел соответствующий вопрос и совет по ссылке , но единственная проблема здесь в том, что файл не был включен в его модель, а в моей да. Фрагменты моих файлов ниже;

models.py

class UploadedDocuments(models.Model):
    user = models.ForeignKey(
        TheUsers,
        on_delete=models.CASCADE,
    )
    document = models.FileField(
        verbose_name='Document',
        upload_to=f'documents/%Y/',
        null=True,
    )
    plagiarism_status = models.CharField(max_length=100, null=True)
    serialised_content = models.CharField(null=True, max_length=255)
    date_uploaded = models.DateTimeField(
        verbose_name='Uploaded On',
        auto_now_add=True
    )

    def __str__(self):
        return self.document.name

    class Meta:
        verbose_name = "Document"
        verbose_name_plural = 'Documents'

Views.py

def upload(request):
    form = UploadedDocumentsForm(request.POST, request.FILES)
    if request.POST:
        if form.is_valid():
           form_stack = form.save(commit = False)
           form.user = request.user
           form_stack.serialised_content = "bala"
           form_stack.plagiarism_status = 'Hello'
           form_stack.save()
           return redirect("results")

функция, которая постоянно сообщает мне о недействительности.

forms.py

class UploadedDocumentsForm(forms.ModelForm):
    class Meta:
        model = UploadedDocuments
        fields = ['document', 'user', 'plagiarism_status', 'serialised_content']
        widgets = {
            'document': forms.FileInput(
                attrs = {
                    'class': 'drop-zone__input',
                    'id': 'file',
                    'accept': '.doc, .docx, .txt',
                    'required': True,
                }
            ),
            'user': forms.Select(
                attrs = {

                }
            ),
            'plagiarism_status': forms.TextInput(
                attrs = {
                    'hidden': True,
                }
            ),
            'serialised_content': forms.TextInput(
                attrs = {
                    'hidden': True,
                }
            )
        }

мой файл шаблона

    <form action="{% url 'upload' %}" method="POST" enctype='multipart/form-data'>
        {% csrf_token %}
        <div class="drop-zone w-50">
        <span class="drop-zone__prompt text-center h3">
            Drops file here
        </span>
            {{ form.document }}
            {{ form.user }}
            {{ form.serialised_content }}
            {{ form.plagiarism_status }}
        </div>
        <div class="d-flex justify-content-center">
            <button type="submit" class="btn btn-white btn-outline-success
                p-4 px-5 w-lg-25 w-md-50 w-sm-50 text-capitalize5 my-5">
                <i class="fa fa-2x fa-sync px-3"></i>
                Upload
            </button>
        </div>
    </form>

Любое предложение о том, как это можно сделать, будет полезным.

добавьте blank и none к вашему пользователю модели UploadedDocuments:

class UploadedDocuments(models.Model):
    user = models.ForeignKey(
        TheUsers,
        null=True,
        blank=True,
        default=None,
        on_delete=models.CASCADE,
    )
    ...
Вернуться на верх