【问题标题】:Change choice field of model in django view在 django 视图中更改模型的选择字段
【发布时间】:2019-09-29 20:41:12
【问题描述】:

我的模型中有多个字段选择。我想在我看来改变雕像的价值。我读了这些article 和这个question。在这些链接中,假设有两种方式:

  1. 创建另一个模型
  2. MultipleChoiceField

如果我想使用 MultipleChoiceField,我必须做什么?我阅读了这些链接:123456;但没有一个是云帮助我,我什么也不懂。 这也是我的代码:

#models.py
STATUE_CHOICE = (
        ('draft', 'draft'),
        ('future', 'future'),
        ('trash', 'trash'),
        ('publish', 'publish'),
    )
statue = models.CharField(max_length=10, choices=STATUE_CHOICE)

#views.ppy
def delete_admin_trash_post(request, slug):
    post = get_object_or_404(Post, slug=slug)

    if request.method =="POST":
        form = AddPostForm(request.POST, instance=post)
        post.statue = 'trash'
        post.save()    
        return redirect('view_admin_post')
    else:
        form = AddPostForm(instance=post)
    template = 'blog/admin_blog/delete_admin_trash_post.html'
    context = {'form': form}
    return render(request, template, context)

这个方法能不能简单完整的解释一下?

【问题讨论】:

  • 这应该是ChoiceField,而不是MultipleChoiceField,因为您可能只能设置一个single状态。
  • 我真的对方式2一无所知。所以可能我把第二种方法的名称写错是很常见的。另一个注意事项是:什么是单身雕像?这能满足我的需要吗? @WillemVanOnsem

标签: python django django-views


【解决方案1】:

MultipleChoiceField 是一个表单小部件。所以你应该在表单中使用它。小部件已准备好使用 HTML 输入,这些输入具有一些验证和清理数据的验证器。要创建一个表单,只需创建一个名为 forms.py 的新文件(这是添加新文件的常用方法。您可以在 views.py 中执行此操作)然后使用它创建一个表单。 默认情况下,带有选项的 charfields 模型具有 ChoiceField 小部件。如果你想覆盖它,你可以在表单 Meta 类中进行。你有一个名为 Post 的模型:

# models.py
class Post(models.Model):
      STATUE_CHOICE = (
              ('draft', 'draft'),
              ('future', 'future'),
              ('trash', 'trash'),
              ('publish', 'publish'),
          )
      statue = models.CharField(max_length=10, choices=STATUE_CHOICE)
      .
      .

还有一个表格AddPostForm:

# forms.py
# or
# views.py
from .models import Post

class AddPostForm(forms.ModelForm):
      class Meta:
            model = Post
            fields = ('statue',...)
            widgets = {'statue' : forms.MultipleChoiceField(choices=Post.STATUE_CHOICE)}

这篇文章很有用: https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#overriding-the-default-fields

【讨论】:

  • 谢谢。那么views.py 呢? ِdelete_admin_trash_post 需要修改吗? @lost-gost
  • 没有。只是在表格中。
  • 我测试了它。它不起作用!我认为views.py 需要一些编辑。 @lost-gost
  • 据我所知,views 没问题。确保您导入了表单。按照我所说的链接进行操作。它显示了完整的指南。并检查您的模板。
  • 我看到了链接,我确信表单也正在导入到我的文件中。是否可以在您的答案中编写示例模板?我认为模板或视图是问题的根源! @lost-gost
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多