繁体   English   中英

如何为 Django 表单字段设置永久值

[英]How to set a permanent value to a Django Form Field

我正在构建经过身份验证的用户可以添加帖子的博客站点。 该表单包含三个字段,包括“用户”字段(显示所有用户列表和一个下拉选项)。 问题是经过身份验证的用户还可以看到其他用户名。

我尝试了两种解决方案

  1. 在模板中渲染时排除此字段或
  2. 无论选择什么用户名,帖子都会以经过身份验证的用户名保存

但我想要的解决方案

'user' 字段将仅显示经过身份验证的用户的名称,并将与标题和描述一起提交

class BlogForm(forms.ModelForm):

class Meta:
    model = Blog
   
    fields = '__all__'


view function

if fm.is_valid():
    us = fm.cleaned_data['user']
    ti = fm.cleaned_data['title']
    ds = fm.cleaned_data['desc']
    post = Blog(user=us, title=ti, desc=ds)
    messages.success(request, 'Blog Created')
    post.save()   
            
{% csrf_token %}
 {{form.user.label}}{{form.user}}<br><br>

{{form.title.label}}{{form.title}}

{{form.desc.label}} {{form.desc}}

在您的表格中 class

def __init__(self, *args, **kwargs):
    super(YourForm, self).__init__(*args, **kwargs)
    self.fields['user'].disabled = True

初始化您的表单:

data = {'user': request.user}
fm = YourForm(initial=data)

下一个:

if fm.is_valid():
    us = fm.cleaned_data['user']
    ti = fm.cleaned_data['title']
    ds = fm.cleaned_data['desc']
    post = Blog(user=us, title=ti, desc=ds)
    messages.success(request, 'Blog Created')
    post.save() 

您的表单将从请求中获取用户,因此您对表单中的用户没有任何依赖关系。

在 model 表单中只包含“title”和“desc”字段,因此模板不呈现“user”字段,我们可以在views.py中通过动态设置用户

class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ('title','desc',)

#views.py 这里我们可以通过动态 user=request.user 设置用户

if fm.is_valid():
    ti = fm.cleaned_data['title']
    ds = fm.cleaned_data['desc']
    post = Blog(user=request.user, title=ti, desc=ds)
    messages.success(request, 'Blog Created')
    post.save()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM