我一直在通过创建UserProfile并使用AUTH_PROFILE_MODULE定义来重构一个从django.contrib.auth.models定制标准用户模型的应用程序。
问题是在整个项目中使用UserProfile中的属性来确定用户看到的内容。
我一直在创建测试并重复输入这种语句:
user = User.objects.get(pk=1)
user_profile = user.get_profile()
if user_profile.karma > 10:
do_some_stuff()
这很乏味,我现在想知道我是否违反了DRY原则。
创建一个自定义UserManager,在请求用户时自动加载UserProfile数据会更有意义。
我甚至可以迭代UserProfile属性并将它们附加到User模型。这将节省我不得不更新所有对代码丢失的自定义模型属性的引用。
当然,我必须反向处理以允许正确更新User和UserProfile模型。
哪种方法更像Django-esque?
答案 0 :(得分:1)
就个人而言,我并不打扰get_profile()
助手。我只是在UserProfile中使用一对一字段User
并设置related_name='projname_profile'
。
然后你可以使用ORM魔法在一个请求中获取所有内容(我认为select_related仅在Django 1.2中选择反向1-1,但可能是后向移植......):
user = User.objects.select_related().get(pk=1)
profile = user.projname_profile # or just call it inline