Django сигнал не распечатывает сообщение в терминале - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь понять сигналы и использовать их в своем приложении. Однако, несмотря на то, что включение этого сигнала не дает мне никакого сообщения об ошибке, и с панели администрирования Django я действительно могу успешно добавить mov ie, но я НЕ вижу сообщения «mov ie созданный», напечатанного на моем Терминал, когда это произойдет. Кто-нибудь мог понять почему? Большое спасибо за любую помощь!

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)

1 Ответ

2 голосов
/ 24 февраля 2020

Я считаю, что рекомендуемый способ использования сигналов следующий:

  • Вы создаете файл signals.py в своем приложении
  • В своем файле app.py, в своем appconfig класс, вы импортируете сигналы в методе ready

Ниже приведен пример создания экземпляра PROFILE при создании экземпляра USER

# 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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...