Я пытаюсь создать класс представления для обработки создания нового объекта Person. Вы можете получить доступ к моему коду на Github по этой ссылке:
https://github.com/DAkbari/FaceRecognitionDjangoWebApi
Это определение объекта Person
class Person(models.Model):
firstName = models.CharField(max_length=200)
lastName = models.CharField(max_length=200)
faceEncode = models.CharField(max_length=3000)
facePicture = models.FileField()
lastLoginPicture = models.FileField()
code = models.CharField(max_length=100)
Я создал класс UserForm
в forms.py
, чтобы показать поля, необходимые для создания нового объекта Person
from identify.models import Person
from django import forms
class UserForm(forms.ModelForm):
class Meta:
model = Person
fields = ['firstName', 'lastName', 'code', 'facePicture']
На следующем шаге я создал представление для UserForm
class PersonCreate(View):
form_class = UserForm
template_name = 'identify/new_person_form.html'
#display a blink form
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
# process form data
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
# clean normalized data
facePicture = form.cleaned_data['username']
FName = form.cleaned_data['firstName']
LName = form.cleaned_data['lastName']
code = form.cleaned_data['code']
user.save()
После перехода к результирующему виду и ввода обязательных полей, когда я нажимаю кнопку «Отправить», выбранный файл исчезает, и в форме появляется требуемая ошибка для этого поля
Если я уберу поле facePicture
из forms.UserForm
, все будет хорошо
new_person_form.html:
<div class="container-fluid">
<div class="row">
<div class="col-sm-12 col-md-7">
<div class="panel panel-default">
<div class="panel-body">
<h3>Create a new account</h3>
<form class="form-horizontal" action="{% url
'identify:new' %}" method="post"
enctype="multipart/form-data">
{% csrf_token %}
{% include 'identify/form-template.html' %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-
success">Submit</button>
</div>
</div>
</form>
{% if errorMsg %}
<p style="color: red;">{{ errorMsg }}</p>
{% endif %}
</div>
</div>
</div>
</div>
</div>
form_template.html:
{% for field in form %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<span class="text-danger small">{{ field.errors }}</span>
</div>
<label class="control-label col-sm-2"> {{ field.label_tag }}</label>
<div class="col-sm-10"> {{ field }}</div>
</div>
{% endfor %}