it-swarm.com.de

Django Model Multiple Choice

Ich weiß, es gibt kein MultipleChoiceField für ein Model, Sie können es nur für Formulare verwenden.

Heute stelle ich ein Problem bei der Analyse eines neuen Projekts im Zusammenhang mit Multiple Choices.

Ich hätte gerne ein Feld wie CharField mit choices mit der Option der Mehrfachauswahl.

Ich habe dieses Problem ein anderes Mal gelöst, indem ich ein CharField erstellt und die Mehrfachauswahl im Formular mit einem forms.MultipleChoiceField Verwaltet und die Auswahl durch Kommas getrennt gespeichert habe.

In diesem Projekt kann ich es aufgrund der Konfiguration nicht tun, wie oben erwähnt, ich muss es in den Modellen tun, und ich bevorzuge [~ # ~] nicht [~ # ~] editiere das Django Admin Formular keine benutze Formulare. Ich benötige ein Modellfeld mit Mehrfachauswahl

  • Hat jemand so etwas über Models gelöst?

Vielleicht einige der Modellfunktionen überschreiben oder ein benutzerdefiniertes Widget verwenden ... Ich weiß nicht, ich bin hier irgendwie verloren.


Bearbeiten

Ich bin mir bewusst, einfach Entscheidungen, ich hätte gerne etwas wie:

class MODEL(models.Model):
    MY_CHOICES = (
        ('a', 'Hola'),
        ('b', 'Hello'),
        ('c', 'Bonjour'),
        ('d', 'Boas'),
    )
    ...
    ...
    my_field = models.CharField(max_length=1, choices=MY_CHOICES)
    ...

aber mit der Fähigkeit zu speichern mehrere Möglichkeiten nicht nur 1 Wahl.

44
AlvaroAV

Sie müssen überlegen, wie Sie die Daten auf Datenbankebene speichern möchten. Dies wird Ihre Lösung bestimmen.

Möglicherweise möchten Sie eine einzelne Spalte in einer Tabelle, in der mehrere Werte gespeichert sind. Dies zwingt Sie auch zu Überlegungen zur Serialisierung. Sie können beispielsweise nicht einfach durch Kommas getrennt vorgehen, wenn Sie Zeichenfolgen speichern müssen, die möglicherweise Kommas enthalten.

Am besten verwenden Sie jedoch eine Lösung wie die folgende:

49
spookylukey

Wenn Sie Postgres verwenden, ziehen Sie die Verwendung von ArrayField in Betracht.

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),
    )
40
lechup

Von den beiden sieht https://pypi.python.org/pypi/Django-select-multiple-field/ runder und vollständiger aus. Es hat sogar einen schönen Satz von Unittests.

Das Problem, das ich gefunden habe, ist, dass es eine Django= 1.10 Verfallswarnung in der Klasse auslöst, die das Modellfeld implementiert.

Ich habe das behoben und eine PR geschickt. Der neueste Code, bis sie meine PR zusammenführen (falls sie sich jemals dafür entscheiden, hehe), ist in meinem Fork des Repos hier: https://github.com/matiasherranz/Django-select-multiple-field =

Prost!

M.-

10
Matias Herranz

Wenn Sie möchten, dass das Widget wie eine Texteingabe aussieht und dennoch mehrere Optionen aus Vorschlägen auswählen kann, suchen Sie möglicherweise nach Select2 . Es gibt auch Django-select2 , das es mit Django Forms and Admin integriert.

0
Risadinha