在Django中连接到用户模型

时间:2012-03-14 20:53:47

标签: python django models

快速(可能是愚蠢的)问题。这是我网站的流程:用户登录并重定向到自定义管理页面。在此管理页面上,他们可以制作“个人资料”。我想将他们创建的配置文件与其用户数据相关联,以便1个用户关联到1个配置文件。

由于某种原因,以下内容无法正常工作(只是尝试关联

UserAdmin.Models

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    username = models.ForeignKey(User)
    firstname = models.CharField(max_length=200)
    lastname = models.CharField(max_length=200)
    email = models.EmailField(max_length=200)

    def __unicode__(self):
        return self.username

UserAdmin.Views

def createprofile(request):

    user = User.objects.get(id=1)
    profile = Profile(username=user, firstname='Joe', lastname='Soe', email='Joe@Soe.com')
    profile.save()

我一直得到:表useradmin_profile没有名为username_id的列

有什么想法吗?赞赏。

修改

删除我的数据库并运行一个新的syncdb,更改为username = models.OneToOneField(User)。现在我开始无法分配“u'superuser”“:”Profile.username“必须是”用户“实例。

2 个答案:

答案 0 :(得分:9)

UserAdmin.Models

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User)

    def __unicode__(self):
        return self.user.get_full_name()

UserAdmin.Views

def createprofile(request):

    user_ = User.objects.get(pk=1)
    profile = Profile(user=user_)
    profile.user.first_name = 'Joe'
    profile.user.last_name = 'Soe'
    profile.user.email = 'Joe@Soe.com'
    profile.user.save()
    profile.save()

答案 1 :(得分:2)

在拥有username ForeignKey字段之前,您已同步了db模型。 Django只会创建表,但一旦创建它们就不会改变它们。这里有一个答案列出您的选择: https://stackoverflow.com/a/7693297/990224

您应该考虑将username重命名为user