Изменить поле выбора модели в представлении Django - PullRequest
0 голосов
/ 12 мая 2019

У меня есть выбор из нескольких полей в моей модели. Я хочу изменить значение статуи на мой взгляд. Я прочитал эти статью и этот вопрос . В этих ссылках предполагалось 2 способа:

  1. создать другую модель
  2. MultipleChoiceField

Что я должен сделать, если я хочу использовать MultipleChoiceField? Я читаю эти ссылки: 1 , 2 , 3 , 4 , 5 и 6 , но ни одно из них не помогло мне, и я ничего не понимаю. Также это мои коды:

#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 Ответ

1 голос
/ 12 мая 2019

MultipleChoiceField - это виджет формы.поэтому вы должны использовать его в формах.виджеты готовы использовать входные данные HTML, которые имеют некоторые валидаторы, которые проверяют и очищают данные.чтобы создать форму, просто создайте новый файл с именем forms.py (это обычный способ добавить новый файл. Вы можете просто сделать это в views.py), а затем создайте форму с этим.по умолчанию модель charfields с возможностью выбора имеет виджет ChoiceField.если вы хотите переопределить его, вы можете сделать это в виде мета-класса.у вас есть модель с именем 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

...