[英]Django model instance with nested field filter
我有这两个模型:
class Task(models.Model):
pass
class Result(models.Model)
task = models.ForeignKey('tasks.Task', related_name='results')
enabled = models.BooleanField('enabled', default=False)
我想为我的临时计算获取带有过滤结果的任务:
task = Task.objects.first()
results = task.results.filter(enabled=True)
task.results.set(results)
这是工作代码,但任务结果将在第一次使用后重写。 如何在不重写task.results的情况下获取带有过滤结果的新任务? 我只需要将更改的任务实例保存在内存中。
我的最后一点是将任务传递给序列化程序。 但在我看来,序列化器必须序列化而不是过滤某些东西。 因为过滤的上下文在其他子模块中可能不同。
class ResultSerializer(DynamicFieldsMixin, ModelSerializer):
class Meta:
model = Result
class TaskResultsSerializer(ModelSerializer):
results = ResultSerializer(many=True, read_only=True)
class Meta:
model = Task
Set 用于替换相关对象。 你得到结果,然后重置它们。 我不确定为什么? 也许您正在尝试进行更新?
https://docs.djangoproject.com/en/2.2/ref/models/querysets/#django.db.models.query.QuerySet.update
从您选择的序列化程序类来看,您似乎正在使用 Django REST 框架进行序列化。 如果这是正确的,我将通过在Task
模型上声明一个可调用对象来处理此问题,该模型返回您想要包含的结果,然后为该可调用对象显式指定一个序列化器字段。 例如:
class Task(models.Model):
def enabled_results(self):
return self.results.filter(enabled=True)
class TaskResultsSerializer(ModelSerializer):
results = ResultSerializer(source='enabled_results', many=True, read_only=True)
class Meta:
model = Task
这是未经测试的,但看起来它应该可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.