Как создать виджет типа "checkbox" для поля "ModelChoiceField"?

  • 13 сентября 2023 г. 1:06
Ответы на вопрос 2
Для создания виджета типа "checkbox" для поля "ModelChoiceField" в Django, вы можете использовать виджет "CheckboxSelectMultiple" и передать его в качестве параметра "widget" при определении поля формы.

Пример:

```python
from django import forms
from .models import YourModel

class YourForm(forms.Form):
    your_field = forms.ModelChoiceField(queryset=YourModel.objects.all(), widget=forms.CheckboxSelectMultiple)
```

По умолчанию, каждый чекбокс будет иметь значение ID связанного объекта модели. Однако, если вы хотите вывести другое поле модели для каждого чекбокса, вы можете переопределить метод `__str__` для вашей модели, чтобы отображать нужное поле.

Пример модели:

```python
from django.db import models

class YourModel(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name
```

Теперь каждый чекбокс будет отображать значение поля "name" модели "YourModel".
Виджет чекбоксов не передает значения модели при запросе с помощью form.cleaned_data["server"], а только True или False. Чтобы иметь список чекбоксов с значениями из queryset модели, вы можете использовать виджет CheckboxSelectMultiple в поле server формы AddCurrencyForm. Этому виджету можно задать параметры id, name и value для управления ими. Пример кода:

```
class AddCurrencyForm(forms.Form):
    ...

    server = forms.ModelMultipleChoiceField(queryset=Servers.objects.all(), widget=forms.CheckboxSelectMultiple, empty_label=None)
```

В этом примере поле server будет отображать список чекбоксов, где каждый из них будет иметь значения из queryset модели Servers.
Похожие вопросы