Я начал замечать, что метод patch
в django каркасе отдыха на самом деле не вызывает сигналы, методы post
, кажется, работают нормально. Это то, что у меня есть:
@receiver(signals.pre_save, sender=Example)
def populate_time_fields_based_on_state(sender, **kwargs):
example = kwargs.get('instance')
if example.start_datetime is None and example.projected_end_datetime is None and example.state.label == 'Assigned':
example.start_datetime = datetime.datetime.now()
example.projected_end_datetime = example.created_datetime + datetime.timedelta(
days=example.som_field)
example.save()
И я проверяю это с помощью:
client = APIClient()
client.patch(f'/api/example/1/', {'state': 'Assigned'})
Есть ли способ сказать ему, чтобы вызвать сигнал? Нужно ли переопределить метод обновления в моем сериализаторе? Я пытаюсь это:
def partial_update(self, request, *args, **kwargs):
response = super().partial_update(request, *args, **kwargs)
instance = self.get_object()
instance.save()
return response
Но это довольно нахально