Django обновление булевого поля в сигнале (pre_save)

Я пробовал .update() и .save(updated_fields=list(kwargs.keys())), но изменения не сохраняются. все выглядит хорошо, когда я прохожу через него в режиме отладки, затем он возвращается обратно для теста. Я работаю с отдельной копией или кэширование - это вещь, которую я должен проверить?

в tests/test_status_model.py

    def test_status_set_tag_info_obsolete(self):
        """ check to see if the creation of a statusInfo 
            object which runs a pre_save signal changes 
            the soon_to_be_obsolete_tag to is_obsolete=True
        """
    
        self.assertFalse(self.soon_to_be_obsolete_tag.is_obsolete)
        self.main_status_info = StatusInfoFactory(
            affected_tag=self.soon_to_be_obsolete_tag,
            status="o",  # obsolete
            by=self.new_replacement_tag,
        )
    
        self.assertTrue(self.soon_to_be_obsolete_tag.is_obsolete)  # fails

в status/models.py

@receiver(pre_save, sender=StatusInfo)
def status_change_modification(sender, instance, *args, **kwargs):
    """
        Changes tags and concepts to be obsolete or deprecated.
        if a tag is obsolete or deprecated, all of the tag's concepts are obsolete or deprecated
        
    """

    assert hasattr(instance.affected_tag, "id")

    # set up variables
    kwargs = {}
    if instance.status == "d":
        kwargs["is_deprecated"] = True
    elif instance.status == "o":
        kwargs["is_obsolete"] = True

    if instance.affected_tag_or_concept == "t": # Yes this works
        inner_tag_status_change(instance, **kwargs)



def inner_tag_status_change(instance, **kwargs):
    """
    update the is_updated fields for status_info
    kwargs is either:
    kwargs = {'is_obsolete': True} # or {'is_deprecated': True}
    """
    affected = Tag.objects.filter(id=instance.affected_tag.id).first()
    affected.__dict__.update(**kwargs)
    affected.save(update_fields=list(kwargs.keys()))

Я думаю, что это самая маленькая информация, которую я могу получить здесь, чтобы проблема имела смысл. Дайте мне знать, если я что-то упустил.

Вернуться на верх