Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将当前用户对象附加到Django窗体_Python_Django_Forms - Fatal编程技术网

Python 将当前用户对象附加到Django窗体

Python 将当前用户对象附加到Django窗体,python,django,forms,Python,Django,Forms,我正在开发一个应用程序,它有一个带有.txt文件上传表单的部分。我想为当前用户上传的文件将与文件和文件名一起添加。目前,我可以在管理部分成功地做到这一点,但我只是无法通过表单本身保存它。有什么想法吗 以下是模型: class UploadedTextFile(models.Model): file = models.FileField(upload_to="textfiles") filename = models.CharField(max_length = 50) username = mo

我正在开发一个应用程序,它有一个带有.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 %}
{%extends'base.html%}
{%block content%}
{%csrf_令牌%}
{{inputtest.as_p}
{%endblock内容%}
在视图中执行此操作(如图所示)是正确的方法。您很可能遇到问题,因为您将
用户名
作为字段保留在表单上,并且由于FK模型字段没有设置
blank=True
表单要求提供字段。您应该在表单的
Meta
类中明确声明只接受用户输入的子集字段

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

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

Hi-Peter。我做了你建议的所有改变。不幸的是,它仍然不起作用。通过重新排列render语句,我将其范围缩小到表单未验证的事实。我编辑了我的问题以表示所说的变化。有什么线索吗?我正式有了一个土豆做大脑。我听从了彼得斯的建议,我的表格仍然无法生效。这是因为我遗漏了enctype=“multipart/form data”。现在一切都好了。你是最棒的。