Python ValueError:无法分配对象用户必须是“用户”;“用户”;实例

Python ValueError:无法分配对象用户必须是“用户”;“用户”;实例,python,django,django-models,Python,Django,Django Models,这对我来说很奇怪。我正在Django信号接收器内设置断点,以调试此设置。即使成功创建了新的CustomerSettings对象,应用程序仍会抛出ValueError。当我第二次尝试创建它时,我得到一个唯一的约束错误,但这是因为它已经成功添加 当存在时,为什么值错误(此用户,用户)=True? 这是一个我可以安全地捕捉并忽略的错误吗?这是因为客户设置id与用户id不同造成的问题吗 创建客户设置 pdb.set_trace()输出1: 再次检查您发布的代码是否是您正在运行的代码。错误消息ValueE

这对我来说很奇怪。我正在Django信号接收器内设置断点,以调试此设置。即使成功创建了新的
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()