2011-04-04 74 views
0

我有以下几点: models.pyDjango的外键关系与创作

class User(models.Model): 
    email = models.EmailField(unique=True) 
    passwd = models.CharField() 
    sessionID = models.CharField() 

class StudentProfile(models.Model): 
    school = models.CharField() 
    name = models.CharField() 
    user = models.ForeignKey(User, unique=True) 

我不知道如何在Django创建用户和StudentProfiles,并让它们联系起来。有人可以提供一些用于创建用户的示例代码,然后创建一个引用用户的StudentProfile。他们是否也可以发布示例访问代码,即让我们说我有一封电子邮件,请说明我将如何查找用户,然后访问随附的个人资料信息。我可以编写一个方法作为User模型的一部分来执行此操作吗?

inb4你为什么不使用Django用户模型? 这与任何事情都是一样的思考,我也想推出自己的产品,因为Django的东西比我需要的要多得多。我更喜欢它甜美和简单。

谢谢!

回答

2

至于除了zhyfer的答案 - 你可以接近日英格斯更甚至有点基本的:

user = User() 
user.email = '[email protected]' 
user.save() 

profile = StudentProfile() 
profile.school = 'MIT' 
profile.user = user 
profile.save() 

要获得相关的项目,你也可以使用related manager

user.profile_set.all()[0]应该返回所创建的用户相关StudentProfile

也因此user.profile_set.all()[0].school应该返回MITprofile.user.email回报[email protected]

这一切都有点在这个博客帖子更多阐述:Doing things with Django models

最后,你可以写userget_profile方法-model喜欢这个:

def get_profile(self): 
    return self.profile_set.all()[0] 
1

如果你有以上的机型,您可以访问通过给出一个电子邮件配置文件:

profile = StudentProfile.objects.get(user__email = '[email protected]') 
school = profile.school 

我认为,如果你想在用户模型的方法来做到这一点,你基本上可以做同样的事情:

def get_profile(email): 
    return StudentProfile.objects.get(user__email = '[email protected]') 

链接:

u = User.objects.create(email="[email protected]", passwd="test", sessionId=1) 
StudentProfile.objects.create(school="test", name="student", user=u) 
+0

我该如何创建它们? – themaestro 2011-04-04 19:18:09

+0

u = User.objects.create(email =“[email protected]”,passwd =“test”,sessionId = 1) StudentProfile.objects.create(school =“test”,name =“student”,user = U) – zhyfer 2011-04-04 19:19:20