Ein Mehrfachauswahlfeld für Wochentage in einem Django-Modell darstellen

8

Ich habe nach einem eleganten Weg gesucht, um ein mehrfach ausgewähltes Wochentagsfeld (Mo, Di, Mi ...) in einem Django-Modell darzustellen. Ich dachte zuerst daran, ein ganzzahliges Feld mit bitweiser Mathematik zu machen, aber ich bin mir nicht sicher, ob das der richtige Weg wäre.

Dies wäre ein meist gelesenes Feld. Ich möchte, dass die Queryset-Methode etwas wie Entry.objects.get(weekdays__contains=MONDAY) ist, wobei MONDAY eine Konstante wäre.

Vielleicht könnte jemand eine bessere Lösung finden? Oder hat jemand etwas Ähnliches getan und hat einen Beispielcode, den sie beitragen könnten?

    
Belmin Fernandez 08.09.2010, 01:05
quelle

1 Antwort

14

Das ist eine alte Frage, aber ich dachte, ich würde zeigen, wie es in Django vernünftig einfach gemacht werden kann.

Hier ist eine Hilfsklasse zum Vorbereiten Ihrer Auswahl:

%Vor%

Definieren Sie Ihr Modell mit einem PositiveIntegerField und den Optionen, die Sie möchten:

%Vor%

Dies bedeutet, dass Sie auf die folgenden Werte zugreifen können:

%Vor%

Definieren Sie nun Ihr Modell mit PositiveIntegerField und diesen Möglichkeiten:

%Vor%

Und deine Modelle sind fertig. Bei Abfragen funktioniert Folgendes:

%Vor%

Es kann eine Möglichkeit geben, eine Q() -Objektunterklasse zu erstellen, die Abfragen packt, so dass sie wie folgt aussehen:

%Vor%

Oder hacken Sie sogar an einer F() Unterklasse, um etwas wie dieses zu erstellen:

%Vor%

Aber ich habe momentan keine Zeit, das zu erkunden. .where funktioniert einwandfrei und kann in eine queryset-Funktion abstrahiert werden.

Eine letzte Überlegung ist, dass Sie möglicherweise ein benutzerdefiniertes Modellfeld erstellen, das die Bitmaske in der Datenbank in eine Liste oder einen Satz in Python konvertiert. Sie können dann ein SelectMultiple Widget (oder CheckboxSelectMultiple ) verwenden, damit der Benutzer seine Werte im Admin auswählen kann.

    
Will Hardy 16.11.2011, 13:51
quelle

Tags und Links