django receiver-DoesNotExist:WidgetList匹配查询不存在
我目前正在使用django receiver-DoesNotExist:WidgetList匹配查询不存在,django,django-models,Django,Django Models,我目前正在使用@receiver向新用户添加令牌,例如- @receiver(post_save, sender=settings.AUTH_USER_MODEL) def create_auth_token(sender, instance=None, created=False, **kwargs): if created: Token.objects.create(user=instance) 我还希望能够基于此模型创建默认WidgetList: class Wi
@receiver
向新用户添加令牌,例如-
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
我还希望能够基于此模型创建默认WidgetList:
class WidgetList(MPTTModel):
name = models.CharField(max_length=100)
description = models.CharField(max_length=1024)
owner = models.ForeignKey('MyAppUser')
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
def __str__(self):
return self.name
class MPTTMEta:
order_insertion_by = ['name']
我试着做另一个接收器-
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_root_list(sender, instance=None, created=False, **kwargs):
if created:
WidgetList.objects.create(user=instance)
编辑-在初始的python manage.py migrate
上,我得到以下回溯:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/opt/myproject_app/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line
utility.execute()
File "/opt/myproject_app/lib/python2.7/site-packages/django/core/management/__init__.py", line 343, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/myproject_app/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/myproject_app/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/opt/myproject_app/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 226, in handle
emit_post_migrate_signal(created_models, self.verbosity, self.interactive, connection.alias)
File "/opt/myproject_app/lib/python2.7/site-packages/django/core/management/sql.py", line 280, in emit_post_migrate_signal
using=db)
File "/opt/myproject_app/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 201, in send
response = receiver(signal=self, sender=sender, **named)
File "/opt/myproject_app/lib/python2.7/site-packages/guardian/management/__init__.py", line 39, in create_anonymous_user
user.save()
File "/opt/myproject_app/lib/python2.7/site-packages/django/db/models/base.py", line 734, in save
force_update=force_update, update_fields=update_fields)
File "/opt/myproject_app/lib/python2.7/site-packages/django/db/models/base.py", line 771, in save_base
update_fields=update_fields, raw=raw, using=using)
File "/opt/myproject_app/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 201, in send
response = receiver(signal=self, sender=sender, **named)
File "/opt/myproject/core/models.py", line 18, in create_root_list
WidgetList.objects.create(user=instance)
File "/opt/myproject_app/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/opt/myproject_app/lib/python2.7/site-packages/django/db/models/query.py", line 346, in create
obj = self.model(**kwargs)
File "/opt/myproject_app/lib/python2.7/site-packages/mptt/models.py", line 393, in __init__
super(MPTTModel, self).__init__(*args, **kwargs)
File "/opt/myproject_app/lib/python2.7/site-packages/django/db/models/base.py", line 480, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'user' is an invalid keyword argument for this function
比较您的回溯和代码,您可以发现错误发生在以下位置:
WidgetList.objects.create(user=instance)
您的模型WidgetList
甚至没有user
字段,所以很明显您不能这样做。可能您正在复制并粘贴导致错误的代码
您的错误发生在
validated\u data['parent']=WidgetList.objects.get(pk=user\u parent\u list)
上,您应该选中1。如果记录确实是由您的信号创建的。2.user\u parent\u list
的值是您期望的值。我更新了问题,我刚刚意识到我有错误的回溯。我尝试运行了两次python manage.py migrate
。第一个回溯现在包括在内。在这两种情况下,都没有创建用户,因此不确定为什么在迁移时失败。正在进行迁移。我将user
更改为owner
,这是一个明显的错误。现在在初始迁移时,我得到了django.db.models.fields.related.RelatedObjectDoesNotExist:WidgetList没有父对象。
正确。我将其更新为WidgetList.objects.create(owner=instance)
,现在得到一个新错误-django.db.models.fields.related.related objectdoesnotextist:WidgetList没有父对象。
这很有意义,因为在迁移时表是空的。迁移做什么?我明白了!在我的测试中,我在我的模型中更改了null=True,blank=True
,我恢复了,它工作了!当它允许我的时候,我会将它标记为已解决!是的,我想。如果它们可以为空,那么它就不会对此抱怨。
WidgetList.objects.create(user=instance)