附加一个电流用户对象在模块中使用的形式(Attaching a current User objec

2019-10-18 21:52发布

我的工作是有一个文件上传表单为.TXT fiels一个部分的应用程序。 我想对于被上传的文件与文件和文件名一起加入当前用户。 目前,我可以在管理部分成功地做到这一点,但我只是不能让它通过窗体本身保存。 有任何想法吗?

下面是型号:

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

Answer 1:

在视图中做(如你所示)是这样做的正确方法。 最有可能你遇到的问题,因为你离开username作为窗体上的字段,因为FK型字段没有blank=True集的形式要求字段来提供。 你应该明确地声明只是要接受用户输入的表单的子集田Meta类。

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

我不知道为什么你呈现不同的模板时,形式是无效的,但不管你没有提供的上下文中的窗体对象。 这意味着,你永远也看不到的形式检测到任何错误,这可能是做什么用此代码发生的一切-你没有看到的是,错误username不提供。



文章来源: Attaching a current User object to Django form