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
希望对您有所帮助
我正在尝试理解这些信号并在我的应用程序中使用它。但是,即使包含此信号也不会给我任何错误消息,并且从 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
希望对您有所帮助