python - 将当前 User 对象附加到 Django 表单

标签 python django forms

我正在开发一个应用程序,其中有一个部分包含 .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 %}

最佳答案

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

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

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

关于python - 将当前 User 对象附加到 Django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799941/

相关文章:

python - 对于 Django 中的 1 对 1 关系,两个模型是否共享 id?

python - Gunicorn,Django,Gevent : Spawned threads are blocking

php - 你如何创建像 pinterest 这样的搜索栏?

php - 帮助 JS 表单验证

python - Excel大数据计算(PCA...)

python - 无法从 tf.keras 模型 -> 量化卡住图 -> 带有 TOCO 的 .tflite

python - 如何检查列表中的两个数字是否相同

python - 使用 ECB 模式加密解密字节时出现问题

python - django项目中如何让多个用户在同一浏览器中同时登录

php - 简化将 html 下拉列表的选项值检索到 php 数组中的过程