使用django rest框架中的补丁更新计算字段时,计算字段不会更新

使用django rest框架中的补丁更新计算字段时,计算字段不会更新,django,django-rest-framework,Django,Django Rest Framework,我有一个这样的模型: class MyModel(models.Model): available_from = models.DateTimeField() available_to = models.DateTimeField() objects = MyModelManager() class MyModel(models.Model): available_from = models.DateTimeField() available_to =

我有一个这样的模型:

class MyModel(models.Model):
    available_from = models.DateTimeField()
    available_to = models.DateTimeField()

    objects = MyModelManager()
class MyModel(models.Model):
    available_from = models.DateTimeField()
    available_to = models.DateTimeField()

    @property
    def is_active(self):
        return (self.available_from <= datetime.now() and self.available_to >= datetime.now() 

    objects = MyModelManager()
MyModelManager
根据
available\u from
available\u to
添加一个计算字段
处于活动状态
,如下所示:

class SprintTypeManager(models.Manager):
    def get_queryset(self) -> QuerySet:
        return (
            super()
            .get_queryset()
            .annotate(
                is_active=expressions.Case(
                    expressions.When(
                        Q(available_from__lte=Now()) & Q(available_to__gte=Now()),
                        then=expressions.Value(True),
                    ),
                    default=expressions.Value(False),
                    output_field=fields.BooleanField(),
                )
            )
        )

这很好,我在API上得到了三个字段,我可以按它们排序,也可以按它们过滤

但是,如果我将
available\u从
available\u更新到
,使
处于活动状态
应使用补丁进行更改,则仅当我使用
GET
重新加载对象时,该更改才会反映在返回的正文中


作为一种解决方法,我可以将serialiser类“
中的对象重新获取到_representation()
方法中,但我想知道是否有更好的方法?

从数据库获取查询时计算此值。我认为最好将其作为模型本身的属性,如下所示:

class MyModel(models.Model):
    available_from = models.DateTimeField()
    available_to = models.DateTimeField()

    objects = MyModelManager()
class MyModel(models.Model):
    available_from = models.DateTimeField()
    available_to = models.DateTimeField()

    @property
    def is_active(self):
        return (self.available_from <= datetime.now() and self.available_to >= datetime.now() 

    objects = MyModelManager()

这里没有DRF的具体内容。。。我可以假设
SprintTypeManager.get\u queryset
是从视图集的
get\u queryset
方法的某处或某处调用的吗?@RishiG是的,确实是的,我考虑过这一点(虽然我将字段放在序列化程序上),但这是代码重复,queryset注释和字段中的逻辑相同。