Django外键关系与创作

时间:2011-04-04 19:07:01

标签: django model foreign-keys

我有以下内容: 的 models.py

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中创建Users和StudentProfiles并将它们链接起来。有人可以提供一些示例代码来创建用户,然后创建一个引用用户的StudentProfile。他们是否也可以发布示例访问代码,即假设我有一封电子邮件,请说明我将如何查找用户,然后访问随附的个人资料信息。我可以编写一个方法作为User模型的一部分来执行此操作吗?

inb4为什么你不使用Django User模型? 这和任何想法一样多,我也想自己动手,因为Django的东西比我需要的多得多。我更喜欢它的甜蜜和简单。

谢谢!

2 个答案:

答案 0 :(得分:2)

作为对zhyfer的回答的补充 - 你可以处理更基本的东西:

user = User()
user.email = 'anon@anon.com'
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应该返回MIT profile.user.email返回anon@anon.com

在这篇博客文章中详细阐述了这一点:Doing things with Django models

最后你可以像这样编写get_profile模型的user方法:

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

答案 1 :(得分:1)

如果您有上述型号,您可以通过以下方式访问给定电子邮件的个人资料:

profile = StudentProfile.objects.get(user__email = 'test@test.com')
school = profile.school

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

def get_profile(email):
    return StudentProfile.objects.get(user__email = 'test@test.com')

链接:

u = User.objects.create(email="test@test.com", passwd="test", sessionId=1) 
StudentProfile.objects.create(school="test", name="student", user=u)