Je sais qu'il n'y a pas MultipleChoiceField
pour un Modèle, vous ne pouvez l'utiliser que sur des formulaires.
Aujourd'hui, je suis confronté à un problème lors de l'analyse d'un nouveau projet associé à plusieurs choix.
Je voudrais avoir un champ comme un CharField
avec choices
avec l'option de choix multiple.
J'ai résolu ce problème d'autres fois en créant un CharField
et en gérant les multiples choix du formulaire avec un forms.MultipleChoiceField
et enregistrez les choix séparés par des virgules.
Dans ce projet, à cause de la configuration, je ne peux pas le faire comme je l'ai mentionné ci-dessus, je dois le faire dans les modèles, et je préfère [~ # ~] pas [~ # ~] éditez le formulaire d'administration Django ni utilisez les formulaires. J'ai besoin d'un champ de modèle avec une option à choix multiples
Peut-être que remplacer certains modèles ou utiliser un widget personnalisé ... Je ne sais pas, je suis un peu perdu.
Je suis conscient de simple choix, j'aimerais avoir quelque chose comme:
class MODEL(models.Model):
MY_CHOICES = (
('a', 'Hola'),
('b', 'Hello'),
('c', 'Bonjour'),
('d', 'Boas'),
)
...
...
my_field = models.CharField(max_length=1, choices=MY_CHOICES)
...
mais avec la possibilité de sauvegarder choix multiples pas seulement 1 choix.
Vous devez réfléchir à la manière dont vous allez stocker les données au niveau de la base de données. Cela dictera votre solution.
Vraisemblablement, vous voulez une seule colonne dans une table qui stocke plusieurs valeurs. Cela vous obligera également à réfléchir à la façon dont vous allez sérialiser. Par exemple, vous ne pouvez pas simplement séparer les virgules si vous devez stocker des chaînes pouvant contenir des virgules.
Cependant, il vaut mieux utiliser une solution semblable à l'une des suivantes:
Si vous utilisez Postgres, pensez à utiliser ArrayField .
from Django.db import models
from Django.contrib.postgres.fields import ArrayField
class WhateverModel(models.Model):
WHATEVER_CHOICE = u'1'
SAMPLE_CHOICES = (
(WHATEVER_CHOICE, u'one'),
)
choices = ArrayField(
models.CharField(choices=SAMPLE_CHOICES, max_length=2, blank=True, default=WHATEVER_CHOICE),
)
Des deux, https://pypi.python.org/pypi/Django-select-multiple-field/ semble plus complet et plus complet. Il a même un bel ensemble de désintéressement.
Le problème que j'ai trouvé est qu'il jette un avertissement Django 1.10) dans la classe qui implémente le champ de modèle.
J'ai corrigé ceci et envoyé un PR. Le dernier code, jusqu’à ce qu’ils fusionnent mes relations publiques (s’ils décident de passer à autre chose), se trouve dans ma fourchette de rapport, ici: https://github.com/matiasherranz/Django-select-multiple-field =
À votre santé!
M.-
Si vous souhaitez que le widget ressemble à une entrée de texte tout en permettant de sélectionner plusieurs options parmi les suggestions, vous recherchez peut-être Select2 . Il existe aussi Django-select2 qui l’intègre avec Django Forms and Admin.