【发布时间】:2020-03-19 11:41:25
【问题描述】:
我有这两个模型:
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
【问题讨论】:
-
你说的broken是什么意思?\
-
@JPG 因为结果将被 .set() 替换。我只想在内存中有过滤结果的新任务。
-
好的。我已经替换了损坏/破坏来重写。希望它很清楚。
-
我明白了——所以问题是你不能只在内存中编辑它,然后让下游序列化程序使用编辑后的版本,因为它是一个反向外键管理器?你用的是什么序列化器?您可能需要对其进行调整。
-
@PeterDeGlopper 是的,你是对的。