在django模型中表示许多布尔值的最佳方法是什么?

时间:2009-07-30 21:14:46

标签: django django-models

我有一个代表用户显示首选项的模型。几乎所有这些首选项都是布尔值。而不是有50个布尔列,有没有更好的方法来解决这个问题?将来当我想添加一个新项目时,我不想在我的数据库中添加新列。

3 个答案:

答案 0 :(得分:1)

“将来当我想添加新项目时,我不想在我的数据库中添加新列。”

在这种情况下,您需要添加一行。

您有一个表格,其中包含可能设置名称的域名。 50行。

您有一张实际设置表。用户,设置名称,设置值。

答案 1 :(得分:1)

如果你有那么多布尔并期望增加更多,你不应该使用列,而是使用条目。

然后,当您需要查找“用户想要电子邮件”时,只需搜索UserPrefs.objects.get(User = user,Preference = Preferences.objects.get(name =“want email”))。

USER_TABLE:

  • 用户
  • 用户名

Preferences_Table:

  • 名称
  • 描述

UserPreferences_Table:

  • 用户(FK_User)
  • 偏好(FK_Preferences)
  • 设置(布尔值)

根据您的设置,您可以省略UserPreferences表中的Setting字段,只需将该User / Preference的条目存在为True,而将缺少一个条目视为False。

答案 2 :(得分:1)

您也可以使用位图。您只需要数据库中的单个字段。在应用程序的某个位置,您可以存储首选项列表,pref1,pref2,pref3 ...并在位图文件中存储与首选项对应的1和0序列。

例如101表示pref1 = yes,pref2 = no,pref3 = yes,011表示pref1 = no,pref2 = yes,pref3 = yes。

您可以通过为位图创建新的模型字段类型来使其可重用。