Python 将当前用户对象附加到Django窗体
我正在开发一个应用程序,它有一个带有.txt文件上传表单的部分。我想为当前用户上传的文件将与文件和文件名一起添加。目前,我可以在管理部分成功地做到这一点,但我只是无法通过表单本身保存它。有什么想法吗 以下是模型: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
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”。现在一切都好了。你是最棒的。