情况是:我们需要一个存储用户档案数据的模型类(他的职业,国家,地区,城市等)。
根据官方Django文档,我们应该做类似下一步的事情:
...
class MyUser( models.User ):
profession = models.CharField( max_length = 64 )
# other fields...
...
问题是:由于数据库中的 django-admin.py syncdb 命令,有2个表。因此,如果我们想按行业找到用户,那么我们的搜索就不那么有效了!我们只能使用一个表进行搜索,但我们必须使用两个进行搜索!
在 syncdb 之后只在数据库中创建一个表时,我知道一个不是非常 clean 的解决方案:而不是继承自模型。用户类我们可以在下一步扩展现有的用户类:
# utils.py
class Utils:
class ClassContributor:
@staticmethod
def contribute_fields( object_class, *fields ):
for val in fields:
field_name = val[ 0 ]
field = val[ 1 ]
field.contribute_to_class( object_class, field_name )
# models py
user_contributor = Utils.ClassContributor.contribute_fields(
User,
( 'profession', models.CharField( max_lenght = 64 ) ),
)
结果有一个表格,但我们在 Django admin
中看不到专业字段是否有人知道 2-tables 问题的另一种解决方案?谢谢。
答案 0 :(得分:1)
根据建议in the docs,您可以使用“用户个人资料”来存储有关用户的其他信息:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
profession = models.CharField( max_length = 64 )
# other fields...
您可以user.get_profile().profession
访问它。你仍然得到两张桌子,但这是推荐的django方式。如果您只搜索配置文件的属性,则只搜索一个表。
除此之外:这个搜索在您的特殊用例中真的很贵吗?你有资料吗?对我来说,使用两个表的方法总是没问题。