在Django视图中更改模型的选择字段

时间:2019-05-12 20:00:56

标签: python django django-views django-2.2

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

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

如果我想使用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)

能否以一种简单而完整的方式来解释这种方法?

1 个答案:

答案 0 :(得分: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