使用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注释和字段中的逻辑相同。