Ho un'applicazione Django e voglio visualizzare più caselle di controllo in un'interfaccia di amministrazione di Django. Non voglio creare un modello separato per le mie scelte utilizzando ManyToManyField.Django models.CommaSeparatedIntegerField with forms.CheckboxSelectMultiple widget
models.py
from django.db import models
STAFF_BUSINESS_TYPES = {
(1, "Foo"),
(2, "Bar"),
(3, "Cat"),
(4, "Dog")
}
class Business(models.Model):
name = models.CharField(max_length=255, unique=True)
business_types = models.CommaSeparatedIntegerField(max_length=32, choices=STAFF_BUSINESS_TYPES)
forms.py
from business.models import Business, STAFF_BUSINESS_TYPES
from django.forms import CheckboxSelectMultiple, ModelForm, MultipleChoiceField
class BusinessForm(ModelForm):
business_types = MultipleChoiceField(required=True, widget=CheckboxSelectMultiple, choices=STAFF_BUSINESS_TYPES)
class Meta:
model = Business
fields = ['name', 'business_types']
def clean_business_types(self):
data = self.cleaned_data['business_types']
cleaned_data = ",".join(data)
return cleaned_data
admin.py
from django.contrib import admin
from business.models import Business
from business.forms import BusinessForm
@admin.register(Business)
class BusinessAdmin(admin.ModelAdmin):
form = BusinessForm
Tuttavia, quando tento di aggiungere un'attività con tipo "Bar":
Selezionare una scelta valida. 1 non è una delle scelte disponibili.
Allo stesso modo con cui si tenta di aggiungere un business con più valori selezionati:
Selezionare una scelta valida. 1,2 non è una delle scelte disponibili.
In che modo 1 non è una scelta valida, considerando (1, "Foo") è nelle mie scelte? È invalido utilizzare il campo intero separato da virgola di Django?