我有一个代表用户显示首选项的模型。几乎所有这些首选项都是布尔值。而不是有50个布尔列,有没有更好的方法来解决这个问题?将来当我想添加一个新项目时,我不想在我的数据库中添加新列。
答案 0 :(得分:1)
“将来当我想添加新项目时,我不想在我的数据库中添加新列。”
在这种情况下,您需要添加一行。
您有一个表格,其中包含可能设置名称的域名。 50行。
您有一张实际设置表。用户,设置名称,设置值。
答案 1 :(得分:1)
如果你有那么多布尔并期望增加更多,你不应该使用列,而是使用条目。
然后,当您需要查找“用户想要电子邮件”时,只需搜索UserPrefs.objects.get(User = user,Preference = Preferences.objects.get(name =“want email”))。
USER_TABLE:
Preferences_Table:
UserPreferences_Table:
根据您的设置,您可以省略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。
您可以通过为位图创建新的模型字段类型来使其可重用。