MultipleChoiceField django python, невозможно отображать данные в шаблоне - PullRequest
0 голосов
/ 31 августа 2018

У меня большая проблема, я использую MultipleChoic Field в django для "input multiselect", пользователь с возможностью выбора нескольких вариантов с помощью «input select множественный»

Я вам объясняю:

Я использую этот пакет: https://pypi.org/project/django-multiselectfield/

это моя модель:

class Profil(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,) 
skill = MultiSelectField(max_length=500, null=True, blank=True, choices=Skillz)
board = MultiSelectField(max_length=500, null=True, blank=True, choices=Boardz)

это моя форма:

class ProfilForm(forms.ModelForm):
skill = forms.MultipleChoiceField(required=False, widget=forms.SelectMultiple, choices=Skillz)
board = forms.MultipleChoiceField(required=False, widget=forms.SelectMultiple, choices=Boardz)

это мои данные о выборе (используется в моделях Profil и форме ProfilForm):

Boardz = (
('Reddit', 'reddit.com'),
('Discord', 'discord.com'),
('Twitter', 'twitter.com'),
)

Skillz = (
('Python', 'PythonDjango'),
('Rust', 'RustRocket'),
('Ruby', 'RubyOnRails'),
)

Теперь проблема заключается в views.py и моем template.html

<!-- this is what I want with my datas -->
<select multiple class="form-control" id="id_board">
     <option>reddit.com</option> 
     <option>discord.com</option>
     <option>twitter.com</option>
 </select>

<select multiple class="form-control" id="id_skillz">
     <option>PythonDjango</option>
     <option>RustRocket</option>
     <option>RubyOnRails</option>
 </select>
 
 <input type="submit" value="Save">

В views.py (что, безусловно, неправильно):

def GetDatasForRegisterForm(request):
form = ProfilForm()
return render_response(request, "registration/register.html",{'form': form})

template.html: Я полностью потерян для отображения моих данных выбора в нескольких выбранных для пользователя, пожалуйста, ребята, как сделать?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Обновление: это хорошо, у меня есть то, что я хотел, вот для ваших членов переполнения стека, мое решение:

class ProfilForm(forms.ModelForm):
 skill = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=Skillz) # skillz and boardz into choices.py 
 board = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=Boardz)

 class Meta:
    model = Profil
    fields = ('skill', 'board',)

в views.py> form = ProfilForm (), вернуть визуализацию ..

{% for value,text in form.board.field.choices %}
 <option value="{{ value }}">{{ text }}</option>
 {% endfor %}
0 голосов
/ 31 августа 2018

Так я собираюсь генерировать мой шаблон и views.py при работе с формами.

Сначала вы определили форму ProfilForm один быстрый способ узнать HTML, сгенерированный в вашей форме, когда ваши представления выглядят как

def GetDatasForRegisterForm(request):
    form = ProfilForm()
    return render_response(request, "registration/register.html",{'form': form})

В ваших шаблонах вы можете просто сделать

<form method="POST" action="<your_action>">
{{ csrf_token }}
{{ form.as_p }}

 <input type="submit" value="Save">
</form>

Теперь при рендеринге django создаст для вас базовый HTML-код на основе указанной модели. Вы можете скопировать HTML-код, настроить стиль и заполнить значения, используя значения полей формы.

Теперь вы не спрашивали о том, как сохранить эту форму. Но позволь мне сделать это в любом случае.

Мы собираемся обработать сообщение формы в том же контроллере, который будет выглядеть следующим образом.

def GetDatasForRegisterForm(request):
    form = ProfilForm(request.POST or None)
    if request.method == "POST" and form.is_valid():
         form.save()
         return redirect("/<sucess_page>")
    return render_response(request, "registration/register.html",{'form': form})

В представлении здесь я загружаю форму с данными POST, если она существует, и проверяю, является ли форма действительной в POST, и сохраняю ее. Вы можете указать, куда вести страницу в случае успеха или ошибки.

...