这是我击中的声音。
我有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
对于这种情况,为了进一步开发网站,我应该使用哪个外键?
答案 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。 不确定它是否是正确的决定,但它似乎更灵活。