Django - Использование форм. CheckboxSelectMultiple - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь создать список с несколькими флажками для имен в базе данных.

Я думал, что мог бы сделать ниже в from, и сделать что-то вроде l oop в шаблоне для рендеринга каждого имени, но заметил, что я пытаюсь работать. Это правильный подход, какие-либо подсказки о том, как сделать это в шаблоне?

Спасибо

from django import forms
from .models import Player

class PlayerForm(forms.Form):

    team = forms.MultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        choices=[Player.objects.all()]
    )


from django.db import models

class Player(models.Model):
    lname = models.CharField(max_length=10, verbose_name='Last Name')
    fname = models.CharField(max_length=10, verbose_name='First Name')
    wins = models.SmallIntegerField(default=0, null=True, blank=True)
    loss = models.SmallIntegerField(default=0, null=True, blank=True)


    def __str__(self):
        return "{}".format(self.lname)

    class Meta:
        ordering = ['lname']

1 Ответ

1 голос
/ 01 марта 2020

Не совсем. Если вам нужно выбрать опцию среди опций модели, вы должны использовать поле ModelMultipleChoiceField [Django -doc] . Это не только облегчит работу с данными, но и каждый раз будет запрашивать базу данных, так что, если вы добавите новый Player, вы можете выбрать этот.

Таким образом, вы можете реализовать это как:

class TeamForm(forms.Form):
    team = forms.<b>ModelMultipleChoiceField(</b>
        widget=forms.CheckboxSelectMultiple,
        <b>queryset=Player.objects.all()</b>
    <b>)</b>

Более того, может быть лучше назвать вашу форму TeamForm, поскольку вы здесь не создаете / обновляете / ... a Player, но выбираете команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...