【问题标题】:How to set a permanent value to a Django Form Field如何为 Django 表单字段设置永久值
【发布时间】:2021-08-14 08:36:20
【问题描述】:

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

我尝试了两种解决方案

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

【问题讨论】:

  • 分享您的模板

标签: python django forms field


【解决方案1】:

模型表单中只包含“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()

【讨论】:

  • 谢谢...但我想要显示所有表单字段'user','title','desc; ...但用户字段将仅由经过身份验证的用户名填充...您提供的解决方案排除了表单中的用户字段。
  • 请分享您的完整html模板代码
  • {% csrf_token %} {{form.user.label}}{{form.user}}

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

    {{form.desc.label}} {{form.desc}} form> # 我想在这里保留用户字段,但它只会由经过身份验证的用户名填充。目前它显示所有其他注册的用户名...
  • {% csrf_token %} {{form.user.label}}{{form.user}}

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

    {{form.desc.label}} {{form.desc}} 表格>
  • 您只想在用户下拉列表中显示已通过身份验证的用户,否则隐藏用户字段,对吗?
【解决方案2】:

在您的表单类中

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() 

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

【讨论】:

  • 谢谢...但我想要显示所有表单字段'user','title','desc; ...但是用户字段将只有经过身份验证的用户名...您提供的解决方案排除了表单中的用户字段。无论如何,您的回答对学习新事物很有帮助...
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 2019-03-20
  • 2015-07-15
  • 1970-01-01
  • 2020-07-13
  • 2011-05-25
  • 1970-01-01
  • 2010-10-23
相关资源
最近更新 更多