Python ValueError:无法分配对象用户必须是“用户”;“用户”;实例
这对我来说很奇怪。我正在Django信号接收器内设置断点,以调试此设置。即使成功创建了新的Python ValueError:无法分配对象用户必须是“用户”;“用户”;实例,python,django,django-models,Python,Django,Django Models,这对我来说很奇怪。我正在Django信号接收器内设置断点,以调试此设置。即使成功创建了新的CustomerSettings对象,应用程序仍会抛出ValueError。当我第二次尝试创建它时,我得到一个唯一的约束错误,但这是因为它已经成功添加 当存在时,为什么值错误(此用户,用户)=True? 这是一个我可以安全地捕捉并忽略的错误吗?这是因为客户设置id与用户id不同造成的问题吗 创建客户设置 pdb.set_trace()输出1: 再次检查您发布的代码是否是您正在运行的代码。错误消息ValueE
CustomerSettings
对象,应用程序仍会抛出ValueError
。当我第二次尝试创建它时,我得到一个唯一的约束错误,但这是因为它已经成功添加
当存在时,为什么值错误(此用户,用户)=True
?
这是一个我可以安全地捕捉并忽略的错误吗?这是因为客户设置
id与用户
id不同造成的问题吗
创建客户设置
pdb.set_trace()输出1:
再次检查您发布的代码是否是您正在运行的代码。错误消息
ValueError:cannotassign”“:“CustomerSettings.user”必须是“user”实例
表示您正试图创建一个CustomerSettings
实例,其中user
属性具有id为6的CustomerSettings
实例
我的猜测是,你正在运行的内容与你发布的内容之间存在脱节。如果没有,则会调用
create\u customer\u settings
,其中实例
参数是CustomerSettings的一个实例
,我花了很长时间仔细研究了回溯。在User
在post\u save
事件后成功创建CustomerSettings
模型后,调用了以前用于update\u customer\u settings
的方法,在这种情况下,实例实际上是CustomerSettings
我为这一混乱道歉。你们都给我指出了正确的方向,谢谢。我需要用一种完全不同的方式来处理这个问题
回溯
我认为您正在尝试创建一个
CustomerSettings
实例创建之后,尝试直接分配CustomerSettings.objects.create(user=instance,email=instance.email,date\u of_birth=“1998-01-04”,在\u private\u mode=False)
要清楚,发送者是用户。我试图直接分配时出错。我明天再试。你有自定义的用户类吗?您确定OneToOneField引用的用户类与您在该信号中使用的用户类相同吗?是的,我以前构建了一个自定义用户类,该类在模型中浮动,但未在信号中使用。我把它注释掉了,但仍然得到错误:异常类型:ValueError异常值:无法分配“”:“CustomerSettings.user”必须是“user”实例。
@PankajSharma-这也不起作用<代码>(Pdb)此用户(Pdb)此用户[0]***类型错误:“用户”对象不支持索引(Pdb)此用户==实例真(Pdb)CustomerSettings.objects.create(用户=实例,电子邮件=实例.email,出生日期=“1998-01-04”,在私有模式=假)***值错误:无法分配“”:“CustomerSettings.user”必须是“用户”实例。(Pdb)谢谢。代码直接来自控制台,我确保仔细检查,以免浪费任何人的时间。感谢您的回答。请务必包括以下内容:->pdb.set_trace()(pdb)此_用户(pdb)是真实的(此_用户,用户)
很高兴您能够理解它!
@receiver(post_save, sender=User)
def create_customer_settings(sender, instance, created, **kwargs):
if created:
this_user = User.objects.get(id=instance.id)
pdb.set_trace()
CustomerSettings.objects.create(
user=this_user,
email=this_user.email,
date_of_birth="1998-01-04",
in_private_mode=False
)
System check identified no issues (0 silenced).
October 29, 2018 - 23:42:57
Django version 2.1.1, using settings 'myapp.settings'
Starting development server at http://127.0.0.1:7000/
Quit the server with CONTROL-C.
> /src/myapp/myapp/models.py(36)create_customer_settings()
-> pdb.set_trace()
(Pdb) this_user
<User: new_user_8080>
(Pdb) isinstance(this_user, User)
True
(Pdb) CustomerSettings.objects.create(
user=this_user,
email=this_user.email,
date_of_birth="1998-01-04",
in_private_mode=False
)
*** ValueError: Cannot assign
"<CustomerSettings: CustomerSettings object (6)>":
"CustomerSettings.user" must be a "User" instance.
(Pdb) this_user.is_anonymous
False
(Pdb) this_user
<User: new_user_8080>
(Pdb) CustomerSettings.objects.create(
user=this_user,
email=this_user.email,
date_of_birth="1998-01-04",
in_private_mode=False
)
*** django.db.utils.IntegrityError:
UNIQUE constraint failed: myapp_customersettings.user_id
(Pdb) CustomerSettings.objects.all()
<QuerySet [<CustomerSettings: CustomerSettings object (1)>,
<CustomerSettings: CustomerSettings object (2)>,
<CustomerSettings: CustomerSettings object (3)>,
<CustomerSettings: CustomerSettings object (4)>,
<CustomerSettings: CustomerSettings object (5)>,
<CustomerSettings: CustomerSettings object (6)>]>
(Pdb) CustomerSettings.objects.all().values()
<QuerySet [
{'id': 1, 'user_id': 1, 'timezone': 'America/New_York', 'email':...
...
...
...
, {'id': 6, 'user_id': 15, 'timezone': '', 'email': 'new_user_8080@gmail.com',
'email_confirmed': False, 'date_of_birth': datetime.date(1998, 1, 4), 'first_name': '', 'last_name': '', 'in_private_mode': False}]>
(Pdb) CustomerSettings.objects.filter(user_id=15)
<QuerySet [<CustomerSettings: CustomerSettings object (6)>]>
(Pdb) CustomerSettings.objects.filter(user_id=15).values()
<QuerySet [{'id': 6, 'user_id': 15, 'timezone': '', 'email': 'new_user_8080@gmail.com', 'email_confirmed': False, 'date_of_birth': datetime.date(1998, 1, 4), 'first_name': '', 'last_name': '', 'in_private_mode': False}]>
(Pdb) CustomerSettings.objects.filter(user_id=15).values()[0]
{'id': 6, 'user_id': 15, 'timezone': '', 'email': 'new_user_8080@gmail.com', 'email_confirmed': False, 'date_of_birth': datetime.date(1998, 1, 4), 'first_name': '', 'last_name': '', 'in_private_mode': False}
(Pdb) CustomerSettings.objects.filter(user_id=15).values()[0]['id']
6
(Pdb) User.objects.get(id=15)
<User: new_user_8080>
(Pdb)
class CustomerSettings(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True, null=False, blank=False)
timezone = models.CharField(max_length=50, choices=TIMEZONE_CHOICES, blank=False, null=False)
email = models.EmailField(
verbose_name='email address',
max_length=255, blank=False, null=False,
unique=True)
email_confirmed = models.BooleanField(default=False)
date_of_birth = models.DateField()
first_name = models.CharField(max_length=50, null=False, blank=False)
last_name = models.CharField(max_length=50, null=False, blank=False)
in_private_mode = models.BooleanField()
File "/Users/my_folder/my_app/my_app/models.py", line 44, in update_customer_settings
CustomerSettings.objects.create(user=instance)
ValueError: Cannot assign "<CustomerSettings: CustomerSettings object (14)>": "CustomerSettings.user" must be a "User" instance.
@receiver(post_save, sender=CustomerSettings)
def update_customer_settings(sender, instance, created, **kwargs):
if created:
CustomerSettings.objects.create(user=instance)
instance.customersettings.save()