2009-07-30 4 views
0

Ich habe ein Modell, das die Anzeigeeinstellungen des Benutzers darstellt. Fast alle diese Präferenzen sind boolesche Werte. Statt 50 booleschen Spalten, gibt es einen besseren Weg, dies zu tun? Wenn ich in Zukunft ein neues Objekt hinzufügen möchte, muss ich keine neue Spalte in meiner Datenbank hinzufügen.Wie lassen sich viele Boolesche Werte in einem Django-Modell am besten darstellen?

+0

Mit "am besten" scheinst du "am meisten erweiterbar" zu meinen. –

Antwort

1

"Wenn ich in Zukunft ein neues Element hinzufügen möchte, muss ich keine neue Spalte in meiner Datenbank hinzufügen."

In diesem Fall sollten Sie eine Zeile hinzufügen.

Sie haben eine Tabelle mit der Domäne möglicher Einstellungsnamen. 50 Zeilen.

Sie haben eine Tabelle der tatsächlichen Einstellungen. Benutzer, Einstellungsname, Einstellungswert.

0

Wenn Sie so viele Boolesche Werte haben und mehr hinzufügen möchten, sollten Sie keine Spalten, sondern Einträge verwenden.

Dann, wenn Sie suchen müssen "User will E-Mails", nur nach UserPrefs.objects.get suchen (Benutzer = Benutzer, Preference = Preferences.objects.get (Name = "will E-Mail")).

User_Table:

  • Benutzer
  • Benutzername
  • etc

Preferences_Table:

  • Name
  • Beschreibung
  • etc

UserPreferences_Table:

  • Benutzer (FK_User)
  • Preference (FK_Preferences)
  • Einstellung (Boolean)

auf Ihrem Setup Je, können Sie sein kann das Setting-Feld in der UserPreferences-Tabelle weglassen und einfach das Vorhandensein eines en verwenden versuchen Sie für diesen Benutzer/Präferenz als ein Wahres und das Fehlen von einem als Falsch.

1

Sie könnten auch eine Bitmap verwenden. Sie benötigen nur ein einzelnes Char-Feld in Ihrer Datenbank. Irgendwo in Ihrer App speichern Sie eine Liste von Einstellungen, pref1, pref2, pref3 ... und im Bitmap-Feld speichern Sie eine Folge von 1 und 0, die den Einstellungen entsprechen.

Zum Beispiel bedeutet 101 pref1 = yes, pref2 = no, und pref3 = yes und 011 bedeutet pref1 = no, pref2 = yes und pref3 = yes.

Sie könnten dies wiederverwendbar machen, indem Sie einen neuen Modellfeldtyp für Bitmaps erstellen.

Verwandte Themen