扩展Django问题中的用户模型

时间:2014-01-28 19:59:24

标签: python django

我目前正在运行Django 1.6并尝试使用本教程扩展用户模型:https://docs.djangoproject.com/en/1.6/ref/models/fields/#django.db.models.OneToOneField 我可以让它工作的唯一方法是创建一个AdditionalUser对象并向后移动以达到用户模型。

我使用了这段代码:

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

class AdditionalUser(models.Model):
    user = models.OneToOneField(User)
    hobby = models.CharField(max_length=50)
    weight = models.FloatField()

但是当我尝试执行以下操作时,它会给我错误的信息:

user = User.objects.get(pk=1)
hasattr(user, 'hobby')
False

我在创建这个新模型后已经运行了syncdb。有什么我做错了吗?

2 个答案:

答案 0 :(得分:3)

User对象没有您在AdditionalUser中指定的属性。但是,它确实有additionaluser属性:

user = User.objects.get(pk=1)
# create the AdditionalUser object
additional = AdditionalUser.objects.create(user=user)
hasattr(user.additionaluser, 'hobby')
True

OneToOneField上的文档说this

  

一对一的关系。从概念上讲,这与a类似   ForeignKey与unique = True,但关系的“反向”侧   将直接返回单个对象。   (......)   如果没有为其指定related_name参数   OneToOneField,Django将使用当前的小写名称   model为默认值。

答案 1 :(得分:0)

如果User对象中不存在'hobby'属性,那么您将始终获得False。

试试这个:

user = AdditionalUser.objects.filter(user__id=1)[0]
hasattr(user, 'hobby')