Django - доступ к ManyToManyField сразу после сохранения объекта - PullRequest
0 голосов
/ 06 мая 2018

Мне нужно уведомить пользователей по электронной почте, когда создается объект MyModel. Мне нужно, чтобы они знали все атрибуты этого объекта , включая ManyToManyFields .

class MyModel(models.Model):
    charfield = CharField(...)
    manytomany = ManyToManyField('AnotherModel'....)

    def to_email(self):
        return self.charfield + '\n' + ','.join(self.manytomany.all())

    def notify_users(self):
        send_mail_to_all_users(message=self.to_email())

Первым делом я попытался переопределить функцию сохранения:

def save(self, **kwargs):
    created = not bool(self.pk)
    super(Dopyt, self).save(**kwargs)
    if created:
        self.notify_users()

Что не работает (многие из них кажутся пустыми QuerySet), вероятно, потому что транзакция еще не была совершена.

Итак, я попробовал сигнал post_save с тем же результатом - пусто QuerySet.

Я не могу использовать сигнал m2mchanged, потому что:

  1. много может быть None
  2. Мне нужно уведомлять пользователей, только если объект был создан, а не когда он был изменен

Вы знаете, как это решить? Есть какой-нибудь элегантный способ?

...