Django 信号不在终端中打印消息

Django signal not printing message in terminal

我正在尝试理解这些信号并在我的应用程序中使用它。但是,即使包含此信号也不会给我任何错误消息,并且从 Django 管理面板,我实际上可以成功添加电影,但在发生这种情况时,我看不到终端中打印的 'movie created' 消息。任何人都可以看到为什么?非常感谢您的帮助!

models.py ...

from django.db.models.signals import post_save


class Movie(models.Model):
    name = models.CharField(max_length=30)
    description = models.TextField(blank=True)
    rating = models.IntegerField(default=0, blank=True, null=True)
    class MovieGenre(models.TextChoices):
        Action = 'Action'
        Horror = 'Horror'
        History = 'History'
        New = 'New'

    genre = MultiSelectField(
        choices=MovieGenre.choices,
        max_choices=3,
        min_choices=1
    )

    def average_rating(self):
        rating = self.movierate_set.aggregate(Avg('rating'))['rating__avg']
        return rating

    class Meta:
        ordering = ["-upload_date"]

    def __str__(self):
        return self.name

    def create_movie(sender, instance, created, **kwargs):

        if created:
                Movie.objects.create(name=instance)
                print('movie created')

        post_save.connect(create_movie, sender=Movie)

我认为推荐的信号使用方式如下:

  • 您在应用程序中创建了一个 signals.py 文件
  • 在您的 app.py 文件中,在您的 appconfig class 中,您在 ready 方法
  • 中导入信号

在下面的示例中,每当创建 USER 实例时我都会创建一个 PROFILE 实例

# signals.py

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import UserProfile


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    """Automatically creates a UserProfile instance whenever a User is created"""
    if created:
        UserProfile.objects.create(user=instance)
# app.py
class UsersConfig(AppConfig):
    name = 'api.users'
    label = 'api.users'

    def ready(self):
        import api.users.signals

希望对您有所帮助