【问题标题】:Django forms: “This field is required” when file POSTed to file field WITH enctypeDjango 表单:当文件发布到带有 enctype 的文件字段时,“此字段是必需的”
【发布时间】:2018-09-08 00:22:49
【问题描述】:

我无法上传文件并收到“此字段为必填项”。到目前为止,它与here 报告的问题相同。但是,我使用enctype="multipart/form-data",就像那个问题中建议的那样。

型号:

class ContentSheet(models.Model):
    content_sheet_name = models.CharField(max_length=500)
    content_sheet_file = models.FileField()

形式:

class ContentSheetForm(forms.ModelForm):
    content_sheet_name = forms.CharField(max_length=50)
    content_sheet_name.widget.attrs.update({'autofocus': 'autofocus', 'placeholder': 'Content Sheet Name'})
    content_sheet_file = forms.FileField()

    class Meta:
        model = ContentSheet
        exclude = tuple()

观点:

def add_user_sentence(request):
    statistics_context = get_statistics()
    if request.method == 'POST':
        form = ContentSheetForm(request.POST, request.FILES)
        if form.is_valid():
            # Save the new sentence to the database.
            form.save(commit=True)
             print "form.content_sheet_file", form.content_sheet_file
             ...
        else:
            print form.errors
    else:
        # If the request was not a POST, display the form to enter details.
        form = ContentSheetForm()

    # Bad form (or form details), no form supplied...
    # Render the form with error messages (if any).
    context = {'user_sentence_form': form}
    return render(request, 'lf_classifier/insert_text.html', context)

HTML:

<form id="user_sentence_form" method="post" enctype="multipart/form-data" action="/lf_classifier/send_text/">
                {% csrf_token %}

                {% for field in user_sentence_form.visible_fields %}
                    {{ field.errors }}
                    {{ field.help_text }}
                    {{ field }}
                {% endfor %}

                <input type="submit" data-icon="action" data-iconpos="right" name="submit" data-inline="true" value="upload" />
            </form>

【问题讨论】:

  • 显示您的 ContentSheet 模型
  • ContentSheet 中是否还有其他字段,或者只是content_sheet_namecontent_sheet_file?您在哪个字段上得到错误?它有什么价值吗?
  • 你需要在你的模型中提到一个路径,比如FileField(upload_to='directory_name/')
  • @Exprator,我添加了 upload_to='uploads/' 但它仍然不起作用并给出相同的消息
  • 你的观点在哪里?

标签: django forms django-forms django-templates


【解决方案1】:

您尚未将文件数据传递给表单。

form = ContentSheetForm(request.POST, request.FILES)

【讨论】:

  • 赞成并更新您在问题中的修复 - 但仍然遇到相同的错误:(
【解决方案2】:

添加data-ajax="false" 解决了我的问题。固定的 HTML:

<form id="user_sentence_form" method="post" enctype="multipart/form-data" data-ajax="false"  action="/lf_classifier/send_text/">
            {% csrf_token %}

            {% for field in user_sentence_form.visible_fields %}
                {{ field.errors }}
                {{ field.help_text }}
                {{ field }}
            {% endfor %}

            <input type="submit" data-icon="action" data-iconpos="right" name="submit" data-inline="true" value="upload" />
        </form>

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2020-10-10
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2016-05-16
    • 2016-04-29
    相关资源
    最近更新 更多