Как получить поле 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,
)
...