Django Сигнал post_save () - PullRequest
       3

Django Сигнал post_save ()

1 голос
/ 06 марта 2020

Как только система обнаружит, что вы уже пригласили 2 пользователей, ваш профиль автоматически сохранится в списке выпускников

. Пожалуйста, посмотрите на эту картинку, например:

enter image description here

это таблица списка выпускников.

enter image description here

Как вы можете видеть на картинке, Джо Дио уже пригласил 2 пользователей ( miro и Джастин ), (вы можете увидеть это у Спонсора )

Я надеюсь, что вы можете помочь мне разобраться с помощью сигнала django, спасибо в advance:)

i wi sh пример, который я сделал, если бы вы поняли, что я хотел получить

это мои models.py

class User(models.Model):
    firstname = models.CharField(max_length=500, null=True,blank=True)
    lastname = models.CharField(max_length=500, null=True, blank=True)
    middlename = models.CharField(max_length=500, null=True, blank=True)

    birthday = models.CharField(max_length=500, null=True, blank=True)
    Email  =  models.CharField(max_length=500,null=True,blank=True)
    Sponsor_User = models.ForeignKey('self', on_delete=models.CASCADE,blank=True, null=True)

class User_GraduateList(models.Model):
    User = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE, blank=True)
    def __str__(self):
        suser = '{0.User}'

ОБНОВЛЕНИЕ это ответ мр @ AKS

class User_GraduateList(models.Model):
    User = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE, blank=True)

    @receiver(post_save, sender=User)
    def create_graduates(sender, instance, created, **kwargs):
        sponsor = instance.Sponsor_User
        if created and sponsor:
            if sponsor.user_set.count() >= 2:
                if not User_GraduateList.objects.filter(User=sponsor).exists():
                    User_GraduateList.objects.create(User=sponsor)

это не сработало.

1 Ответ

1 голос
/ 14 марта 2020
class User_GraduateList(models.Model):
    User = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE, blank=True)

@receiver(post_save, sender=User)
def create_graduates(sender, instance, created, **kwargs):
    sponsor = instance.Sponsor_User
    if created and sponsor:
        if sponsor.user_set.count() >= 2:
            if not User_GraduateList.objects.filter(User=sponsor).exists():
                User_GraduateList.objects.create(User=sponsor)

Для целей чтения я вложил условия if. Если вы чувствуете себя комфортно, вы можете присоединиться, используя and.

. Приведенное выше решение основано на предположении, что мы хотим сделать это только при создании нового пользователя. Если пользователь спонсора может быть установлен позже, чек created может быть удален из первого условия.

Кроме того, глядя на модели, я думаю, что будет лучше иметь отношение один к одному между User_GraduateList и User модель.

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