我目前正在运行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。有什么我做错了吗?
答案 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')