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
字段,所以很明显您不能这样做。可能您正在复制并粘贴导致错误的代码

  • 您的模型中没有用户。我知道你指的是主人
  • 由于没有数据,您将获得外键引用错误。使用fixture加载一些父数据。这将解决这个问题

  • 您的错误发生在
    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)