1

我正在开发一个应用程序,该应用程序的部分包含 .txt 字段的文件上传表单。我希望正在上传文件的当前用户连同文件和文件名一起添加。目前,我可以在管理部分成功执行此操作,但我无法通过表单本身保存它。有任何想法吗?

以下是模型:

class UploadedTextFile(models.Model):
file = models.FileField(upload_to="textfiles")
filename = models.CharField(max_length = 50)
username = models.ForeignKey(User, blank=True, null=True)


class UploadedTextFileForm(ModelForm):
    class Meta:
        model = UploadedTextFile
        fields = ['file', 'filename']

这是我的看法:

def inputtest(request):

#response for file being submited
    if request.method == "POST":
        form = UploadedTextFileForm(request.POST)  
        if form.is_valid():
            new_form = form.save(commit=False)
            new_form.username = request.user
            new_form.save()


        return render(request, 'about.html')

    inputtest = UploadedTextFileForm()
    return render(request, 'failed.html', {'inputtest': inputtest})

    else:
        inputtest = UploadedTextFileForm()
        return render(request, 'inputtest.html', {'inputtest': inputtest})

这是我的html:

{% extends 'base.html' %}

{% block content %}
<form method="post">{% csrf_token %}
{{ inputtest.as_p }}
<input type="submit" value="Submit" />
</form>

{% endblock content %}
4

1 回答 1

2

在视图中执行此操作(如您所示)是执行此操作的正确方法。很可能您遇到问题是因为您username在表单上留下了一个字段,并且因为 FK 模型字段没有blank=True设置表单需要提供该字段。Meta您应该在表单的类中仅显式声明要接受用户输入的子集字段。

class UploadedTextFileForm(ModelForm):                
    class Meta:                                       
        model = UploadedTextFile
        fields = ['file', 'filename']

我不确定为什么当表单无效时您要呈现不同的模板,但无论您没有在上下文中提供表单对象。这意味着您将永远不会看到表单检测到的任何错误,这可能是这段代码所发生的 - 您没有看到username未提供的错误。

于 2013-11-05T22:16:40.023 回答