django用户配置文件数据库问题

django用户配置文件数据库问题,django,django-authentication,Django,Django Authentication,我有一个名为aaa的应用程序,在models.py的aaa中,我有如下内容: from django.db import models from django.contrib.auth.models import User class BBB(models.Model): user = models.OneToOneField(User) newsletter=models.BooleanField(default=False) 我将添加到我的setting.py AUTH_

我有一个名为aaa的应用程序,在models.py的aaa中,我有如下内容:

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

class BBB(models.Model):
    user = models.OneToOneField(User)
    newsletter=models.BooleanField(default=False)
我将添加到我的setting.py

AUTH_PROFILE_MODULE = 'aaa.BBB'
然后我转到django shell并键入

>>> from django.contrib.auth.models import User
>>> a=User.objects.get(id=1)
>>> a.get_profile()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/Django-1.2.5-py2.6.egg/django/contrib/auth/models.py", line 373, in get_profile
    self._profile_cache = model._default_manager.using(self._state.db).get(user__id__exact=self.id)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.2.5-py2.6.egg/django/db/models/query.py", line 347, in get
    % self.model._meta.object_name)
DoesNotExist: BBB matching query does not exist.
>>来自django.contrib.auth.models导入用户
>>>a=User.objects.get(id=1)
>>>a.获取_配置文件()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.6/dist packages/Django-1.2.5-py2.6.egg/Django/contrib/auth/models.py”,第373行,在get_配置文件中
self.\u profile\u cache=model.\u default\u manager.using(self.\u state.db).get(user\uuuuuuu id\uuuuuuuu exact=self.id)
文件“/usr/local/lib/python2.6/dist packages/Django-1.2.5-py2.6.egg/Django/db/models/query.py”,第347行,在get中
%self.model.\u meta.object\u name)
DoesNotExist:BBB匹配查询不存在。
有人知道怎么回事吗?
编辑:我确实管理.py syncdb

没关系,一切正常
DoesNotExist:BBB匹配查询不存在。
表示此用户没有BBB(用户配置文件)(匹配查询,即获取此用户的用户配置文件)

使用
DoesNotExist
异常断言特定用户是否具有关联的用户配置文件。创建与用户
a
相关的
BBB
实例时,不会得到
DoesNotExist
异常

方法get_profile()不可用 创建配置文件(如果没有) 存在。您需要注册一个处理程序 信号机 django.db.models.signals.post_保存打开 用户模型,并且在处理程序中, 如果created=True,则创建关联的 用户配置文件

他们提到的信号并不是真正文档化的django风格,他们提供了代码示例,因此我将为您创建一个示例:

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

def create_userprofile(sender, **kwargs):
    created = kwargs['created'] # object created or just saved?

    if created:
        BBB.objects.create(user=kwargs['instance'])  # instance is the user
        # create a BBB "profile" for your user upon creation.
        # now every time a user is created, a BBB profile will exist too.
        # user.BBB or user.get_profile() will always return something

signals.post_save.connect(create_userprofile, sender=User)

非常感谢你的帮助。我还有一个问题,我应该把这段代码放在我的views.py中,在那里我尝试调用user.get_profile()?把它放在BBB模型的下面,因为信号处理程序会立即处理它。如果你的
models.py
模块太拥挤,或者你想把你的应用程序组件分开,你可以把它放在同一个应用程序的
signals.py
模块中(有点潜规则)。