【问题标题】:Problem in creating a class view for creating new object in Django在 Django 中创建用于创建新对象的类视图时出现问题
【发布时间】:2019-02-10 05:15:22
【问题描述】:

我正在尝试创建一个视图类来处理新 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)

我在 forms.py 中创建了类 UserForm 以显示创建新 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()

当我点击提交按钮导航到结果视图并输入必填字段后,我选择的文件会消失,并且表单会引发该字段的必填错误

如果我从 forms.UserForm 中删除 facePicture 字段,一切都会好起来的

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 %}

【问题讨论】:

  • 您是否在模板中的&lt;form&gt; 标签中使用了enctype="multipart/form-data"
  • 是的,我愿意,

标签: python django forms web


【解决方案1】:

初始化表单实例时忘记request.FILES

form = self.form_class(request.POST, request.FILES)

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多