【问题标题】:Storing lists of words in database - best practice在数据库中存储单词列表 - 最佳实践
【发布时间】:2013-01-23 19:52:23
【问题描述】:
我正在网站上实施用户过滤系统。用户将能够选择他们感兴趣的“类别”和“包”,并在登录时显示匹配的数据。两组数据都来自HTML select forms,例如。类别:“空指针”、“死代码”……以及包“package_x”、“package_y”、“package_z”……
我的问题是关于将此列表信息存储在数据库中的最佳方式(我使用的是 Django 和 PostgresSQL)。
我最初的想法是有一个这样的表:
user_id - one to one field
categories - textfield - store json data
packages - textfield - store json data
有没有更好的方法来做到这一点?
【问题讨论】:
标签:
database
django
postgresql
django-models
【解决方案1】:
我会使用user profile 的路线,其中类别和包是多对多字段的。
在models.py中
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=255)
class Package(models.Model):
name = models.CharField(max_length=255)
class UserProfile(models.Model):
user = models.ForiegnKey(User)
categories = models.ManyToManyField(Category)
packages = models.ManyToManyField(Package)
在 admin.py 中
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class CustomUserAdmin(UserAdmin):
inlines = [UserProfile]
#filter_horizontal = ('',) #Makes the selection a bit more friendly
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
在views.py中
user_with_profile = User.objects.get(pk=user_id).get_profile()
说了这么多。 Django 1.5 将使用configurable user model 替换用户配置文件。