对于我所有的外国人,我应该在Django中使用User或UserProfile吗?

时间:2011-05-05 18:34:24

标签: django django-models

这是我击中的声音。

我有User和ProfileUser。我想为模型添加额外的逻辑,因为我不能将它添加到Django User模型,我必须将它添加到ProfileUser。目前我所有的模型都有ForeignKey(用户)。我应该保留它们,还是应该在其他型号上使用ForeignKey(UserProfile)?

如果我保留ForeignKey(用户),我的视图示例:

class myview(request):
    user = request.user
    userProfile = user.get_profile()
    neededStuff = userProfile.get_needed_stuff()

然后在UserProfile模型中:

def get_needed_stuff(self):
    user= self.user # Or actually, is this right 
    goals = Goal.objects.get(<conditions that i wont bother writing here>)
    return goals

对于这种情况,为了进一步开发网站,我应该使用哪个外键?

3 个答案:

答案 0 :(得分:2)

我认为你应该使用User。 UserProfile应该是自定义的,并且可以在每个项目上有所不同。因此,如果您将为另一个项目使用相同的代码,那么您可能会失败。此外,在代码中获取用户对象总是很容易,并且您可以在显示时获取配置文件user.get_profile()(并且不总是需要配置文件)。所以一般情况下,我认为使用其他模块更容易,只传递用户对象(或id),而不是简档。

也可以是解决方案 - 编写自己的类,负责用户。只需通过传递用户对象和关于你想要的其他参数,只需编写返回profile的方法,返回stuff_needed或任何你想要的东西。

所以简而言之,我是使用User for Foreign keys,因为在我看来它更合乎逻辑,而User模型总是主要的(你总是拥有它)而UserProfile只是扩展。

Ignas

答案 1 :(得分:1)

如果您只是希望属于特定用户的所有目标,请在目标模型中为用户添加外键。

class Goal(models.Model):
    user = models.ForeignKey(User)

def myview(request):
    goals = Goal.objects.filter(user=request.user)

或者在UserProfile模型上交替保存用户的所有目标并执行

def myview(request):
    user_profile = user.get_profile()
    goals = user_profile.goals

...或使用方法进行处理以计算它们

goals = user_profile.calculate_goals()

答案 2 :(得分:0)

我一直在为自己的一个网站思考同样的事情,但我决定使用UserProfile而不是User。 不确定它是否是正确的决定,但它似乎更灵活。