Django не показывает выбранные варианты при множественном выборе

#python #html #django #plugins

#python #HTML #django #Плагины

Вопрос:

Django multiselect не возвращает / не отображает выбранные варианты, сохраненные в базе данных

form.py

 class testform(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        temp = User.objects.values_list('username', flat=True).filter(groups__name = "Artist")
        OPTIONS1 = zip(temp, temp)
        self.fields['column'].choices = [OPTIONS for OPTIONS in OPTIONS1]

    column = forms.MultipleChoiceField(required = True, choices= [])
  

Выбор параметров проходит нормально, как

views.py

 def index(request):

    if request.method == "POST":
        form = testform(request.POST)
        if form.is_valid():
            form.save()
        return redirect('index')
    else:
        form = testform()
    return render(request, 'dummy/index.html', {
        'edit_form' : form})
  

Данные сохраняются как однажды выбранные

 ['artist1', 'artist2', 'artist3']
  

Но при повторном посещении той же страницы он не показывает выбранные варианты этого экземпляра, вместо этого в поле выбрать несколько вариантов нет выбора из указанных выше 3 вариантов

Получение представления

 def dummyedit(request, id): 
    obj = bfs_projects.objects.get(id = id) 
    if request.method == "POST": 
       form = testform(request.POST, instance =obj) 
       if form.is_valid(): 
           form.save() 
           return redirect('index') 
    else: 
       form = testform(instance =obj) 
    return render(request, 'dummy/index.html', { 'edit_form' : form, }) 
  

models.py

 class bfs_projects(models.Model):

    column = models.CharField(max_length = 255)
  

Небольшая помощь настоятельно приветствуется,
Заранее спасибо

Комментарии:

1. Форма, которую вы визуализируете, инициализируется следующим образом: testform() . Итак, вы инициализируете его пустым. Если вы хотите, чтобы форма отображала начальные значения, вы можете передать initial словарь. В вашем случае у вас есть ModelForm , поэтому вы должны передать ему начальный экземпляр : form = testform(instance=MyModel.objects.get(id=<theidtoshow>) . Однако, похоже, ваше представление не относится к конкретному экземпляру, поэтому я понятия не имею, какой экземпляр вы хотели бы показать.

2. У меня есть представление редактирования, def dummyedit(запрос, идентификатор): obj = bfs_projects.objects.get(id = id) если запрос.метод == «POST»: форма = тестовая форма (запрос. POST, instance =obj) если form.is_valid(): form.save() возвращает перенаправление (‘index’) иначе: form = testform(instance =obj) возвращает рендеринг (запрос, ‘dummy/index.html ‘, {‘edit_form’ : форма, }) Когда я визуализирую это представление, ононе выбирает выбранные варианты, извините, я не прикрепил это представление в начале, подумал, что это понятно

3. тогда представление индекса не имеет отношения к вашему вопросу, поскольку это не представление, отображающее страницу, на которой у вас есть неожиданный результат. Добавьте правильное представление в свой вопрос.

4. Извиняюсь за ошибку, добавил правильное представление здесь

5. есть column ли поле в вашей модели?