TypeError: connect() got an unexpected keyword argument 'signal' - Django signals
TypeError: connect() got an unexpected keyword argument 'signal' - Django signals
我正在尝试创建一个简单的信号,它会在 Staff
模型的新对象保存在 Django-admin 中后打印一些内容。 MVC python 文件位于 AppName
中。这是每个文件中的代码:
models.py
from django.db import models
from django.db.models import signals
from django.dispatch import Signal
from django.contrib.auth.models import User
from AppName.signals import printfunction
from django.db.models.signals import post_save
class Staff(User):
class Meta:
proxy = True
app_label = 'auth'
verbose_name_plural = 'Users - Staff'
Signal.connect(printfunction, signal=signals.post_save, sender=Staff)
signals.py
def printfunction(sender, instance, signal, *args, **kwargs):
print ("signal alpha!")
但是它引发了以下异常:
TypeError: connect() got an unexpected keyword argument 'signal'
我遵循了 1.8 django documentation on signals. 为什么会出现此错误以及如何解决它?
Signal.connect(receiver[, sender=None, weak=True, dispatch_uid=None])
这是一种非常常见的文档表示法。它不是可以按原样使用的文字代码。 [
和 ]
之间的参数是可选的,如果您将它们省略,它们将使用默认值。 connect
是classSignal
上的一个方法。除非另有说明,否则您可以假定它是一个实例方法。你应该调用 signal_instance.connect()
而不是字面上调用 Signal.connect()
,其中 signal_instance
当然是 Signal
class.
的一个实例
在这种情况下,signals.post_save
是 Signal
的一个实例,它是您要将函数连接到的实例。 receiver
参数是必需的,在本例中它是您的函数 printfunction
。 sender
、weak
和 dispatch_uid
都是可选的。在您的示例中,您仅将 Staff
作为 sender
传递,并将其他参数保留为其默认值。因此,您的最终函数调用应如下所示:
signals.post_save.connect(printfunction, sender=Staff)
正确的做法是:
@receiver(post_save, sender=Staff)
def printfunction(sender, instance, signal, *args, **kwargs):
print ("signal alpha!")
我正在尝试创建一个简单的信号,它会在 Staff
模型的新对象保存在 Django-admin 中后打印一些内容。 MVC python 文件位于 AppName
中。这是每个文件中的代码:
models.py
from django.db import models
from django.db.models import signals
from django.dispatch import Signal
from django.contrib.auth.models import User
from AppName.signals import printfunction
from django.db.models.signals import post_save
class Staff(User):
class Meta:
proxy = True
app_label = 'auth'
verbose_name_plural = 'Users - Staff'
Signal.connect(printfunction, signal=signals.post_save, sender=Staff)
signals.py
def printfunction(sender, instance, signal, *args, **kwargs):
print ("signal alpha!")
但是它引发了以下异常:
TypeError: connect() got an unexpected keyword argument 'signal'
我遵循了 1.8 django documentation on signals. 为什么会出现此错误以及如何解决它?
Signal.connect(receiver[, sender=None, weak=True, dispatch_uid=None])
这是一种非常常见的文档表示法。它不是可以按原样使用的文字代码。 [
和 ]
之间的参数是可选的,如果您将它们省略,它们将使用默认值。 connect
是classSignal
上的一个方法。除非另有说明,否则您可以假定它是一个实例方法。你应该调用 signal_instance.connect()
而不是字面上调用 Signal.connect()
,其中 signal_instance
当然是 Signal
class.
在这种情况下,signals.post_save
是 Signal
的一个实例,它是您要将函数连接到的实例。 receiver
参数是必需的,在本例中它是您的函数 printfunction
。 sender
、weak
和 dispatch_uid
都是可选的。在您的示例中,您仅将 Staff
作为 sender
传递,并将其他参数保留为其默认值。因此,您的最终函数调用应如下所示:
signals.post_save.connect(printfunction, sender=Staff)
正确的做法是:
@receiver(post_save, sender=Staff)
def printfunction(sender, instance, signal, *args, **kwargs):
print ("signal alpha!")