Проблема в создании представления класса для создания нового объекта в Django - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь создать класс представления для обработки создания нового объекта 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 field would disappears after clicking submit button

Если я уберу поле 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 %}

1 Ответ

0 голосов
/ 05 сентября 2018

Вы забыли request.FILES при инициализации экземпляра формы:

form = self.form_class(request.POST, request.FILES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...