Python 保存新用户时出现重复密钥错误
我试图在django中保存一个用户和一个配置文件,它们使用Python 保存新用户时出现重复密钥错误,python,django,Python,Django,我试图在django中保存一个用户和一个配置文件,它们使用oneToOneField链接在一起,但我收到一个错误消息 重复的键值违反了唯一约束 “身份验证用户用户名密钥” 即使我没有任何副本 我也得到了这个错误: 重复的键值违反了唯一约束 “api_配置文件_用户_id_密钥”详细信息:密钥(用户_id)=(9)已存在 这是我的密码: model.py from django.db import models from django.contrib.auth.models import User
oneToOneField
链接在一起,但我收到一个错误消息
重复的键值违反了唯一约束
“身份验证用户用户名密钥”
即使我没有任何副本
我也得到了这个错误:
重复的键值违反了唯一约束
“api_配置文件_用户_id_密钥”详细信息:密钥(用户_id)=(9)已存在
这是我的密码:
model.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models import CharField, OneToOneField
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
phone_number = CharField(max_length=20)
account_type = CharField(max_length=10, default='basic')
facebook_id = CharField(max_length=20, blank=True)
google_id = CharField(max_length=20, blank=True)
notification_id = CharField(max_length=40, blank=True)
# TODO add account info and watchlist
def __str__(self):
return self.user.email
@receiver(post_save, sender=User)
def user_save(sender, instance, **kwargs):
Profile.objects.create(user=instance)
view.py:
@api_view(['POST'])
def sign_up(request):
data = request.data
user = User.objects.create_user(username=data['username'],
password=data['password'],
first_name=data['first_name'],
last_name=data['last_name'],
email=data['email']
)
user.profile.phone_number = data['phone_number']
user.save()
return Response('hey')
我想问题出在post_save接收器中,但我不确定。
create_user
也在调用save(),然后您也调用了user.save()
,post_save信号为一个用户调用了两次,您会收到错误,因为为一个用户创建了两个配置文件对象
你可以做:
@receiver(post_save, sender=User)
def user_save(sender, instance, **kwargs):
Profile.objects.get_or_create(user=instance)
这似乎不正确,因为它会查询数据库以查找代码中应该知道的内容。我在函数中添加了第三个参数
created
,并且我仅在标志为true时创建。这似乎已经修复了它