В Django, как я уведомляю родителя, когда ребенок сохраняется в отношениях внешнего ключа?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

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

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

16
задан RamenChef 19 December 2016 в 19:57
поделиться

2 ответа

То, что Вы хотите изучить, сигналы Django (выезд эта страница также), конкретно образцовые сигналы - более конкретно, сигнал post_save. Сигналы являются версией Django системы плагина/рычага. Сигнал post_save отправляется каждый раз, когда модель сохраняется, обновляется ли это или создается (и это сообщит, было ли это создано). Это - то, как Вы использовали бы сигналы, которые будут уведомлены, когда Действие имеет Отмену

from django.db.models.signals import post_save

class Activity(models.Model):
    name = models.CharField(max_length=50, help_text='Some help.')
    entity = models.ForeignKey(CancellationEntity)

    @classmethod
    def cancellation_occurred (sender, instance, created, raw):
        # grab the current instance of Activity
        self = instance.activity_set.all()[0]
        # do something
    ...


class Cancellation(models.Model):
    activity = models.ForeignKey(Activity)
    date = models.DateField(default=datetime.now().date())
    description = models.CharField(max_length=250)
    ...

post_save.connect(Activity.cancellation_occurred, sender=Cancellation)
17
ответ дан 30 November 2019 в 22:10
поделиться

Что случилось со следующим?

class Cancellation( models.Model ):
    blah
    blah
    def save( self, **kw ):
        for a in self.activity_set.all():
            a.somethingChanged( self )
        super( Cancellation, self ).save( **kw )

Это позволило бы Вам управлять уведомлением среди моделей очень точно. В некотором смысле, это - каноническое, "Почему OO так хорошо?" вопрос. Я думаю, что OO хорошо точно, потому что Ваш набор объектов Отмены и Действия может в полной мере сотрудничать.

4
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: