我在Django中有一个扩展的UserProfile模型:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
#other things in that profile
还有一个signal.py:
from registration.signals import user_registered
from models import UserProfile
from django.contrib.auth.models import User
def createUserProfile(sender, instance, **kwargs):
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
user_registered.connect(createUserProfile, sender=User)
我通过在我的__init__.py
:中确保信号被注册:
import signals
因此,应该为每个注册用户创建一个新的UserProfile,对吗?但事实并非如此。尝试登录时,总是出现“ UserProfile匹配查询不存在”错误,这意味着该数据库条目不存在。
我应该说我使用django-registration,它提供了user_registered信号。
为此,重要应用程序的结构是,我有一个名为“用户”的应用程序,这里有:models.py,signals.py,urls.py和views.py(以及其他一些在这里无关紧要的东西) )。UserProfile类在models.py中定义。
更新:我将signals.py
更改为:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile()
profile.user = user
profile.save()
post_save.connect(create_profile, sender=User)
但是现在我收到一个“ IntegrityError”:
"column user_id is not unique"
编辑2:
我找到了。好像我以某种方式注册了两次信号。此处介绍了解决方法:http : //code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave
我必须添加一个dispatch_uid,现在我的signals.py看起来像这样并且正在工作:
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from models import UserProfile
from django.db import models
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile(user=user)
profile.save()
post_save.connect(create_profile, sender=User, dispatch_uid="users-profilecreation-signal")
你可以在用户上使用post_save实现它:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
post_save.connect(create_profile, sender=User)
编辑:
另一个可能的解决方案,它已经过测试并且可以正常工作(我正在我的网站上使用它):
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
up = UserProfile(user=user, stuff=1, thing=2)
up.save()
post_save.connect(create_profile, sender=User)
本文向大家介绍Django 扩展用户配置文件示例,包括了Django 扩展用户配置文件示例的使用技巧和注意事项,需要的朋友参考一下 示例 本示例是摘自Proto扩展Django用户配置文件的摘录
我试图创建一个在姜戈的聊天论坛。但要做到这一点,我需要扩展用户模型,但扩展后,配置文件图像不保存这是我的模型 我的观点: 我的表单.py signup.html null 设置.py STATIC_URL=“/static/” MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE_DIR,'media') 问题是没有创建用户。如果我从用户保存的代码中删除i
在我们的软件,我们使用spring Java配置。我们有一个设置,其中一个配置扩展了一个抽象配置。请看一下这个测试案例: 其思想是,覆盖了并且在创建的ApplicationContext中只有一个类型的bean位于名称之下。 结果是: 所以它说,有两个bean(两个实例--每个名称一个)--甚至更令人吃惊的是:创建这两个bean都使用了相同的方法()。 这种行为在我们看来很奇怪:我们希望sprin
译者:cangyunye 作者: Adam Paszke 修订者: Adam Dziedzic 在这个教程里,我们要完成两个任务: 创建一个无参神经网络层。 这里需要调用numpy作为实现的一部分。 创建一个权重自主优化的伸进网络层。 这里需要调用Scipy作为实现的一部分。 import torch from torch.autograd import Function 无参数示例 这一层并
每个项目都是一个扩展包 一旦你的目录有一个 composer.json 文件,这个目录就是一个包。当你给一个项目添加一个 require 依赖时, 此时你正在创建一个依赖于其他包的包。 项目和扩展包唯一不同之处在于,项目是一个没有名称的包。 为了使该包可安装,你需要指定一个名称, 通过在 composer.json 中添加 name 属性: { "name": "acme/hello-wo