带有嵌套字段fi的Django模型实例

2021-10-17 17:41:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种模式:

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)

这是工作代码,但任务结果将在第一次使用后重写。如何获得新的任务与过滤结果没有任务.结果重写?我只需要将更改的任务实例保存在内存中。你知道吗


我的最后一点是将任务传递给序列化程序。但在我看来,序列化程序必须序列化,而不过滤某些内容。因为过滤的上下文在其他子模块中可能不同。你知道吗

class ResultSerializer(DynamicFieldsMixin, ModelSerializer):
    class Meta:
        model = Result


class TaskResultsSerializer(ModelSerializer):
    results = ResultSerializer(many=True, read_only=True)
    class Meta:
        model = Task
2条回答
网友
1楼 ·

集合用于替换相关对象。你得到结果然后重新设置。我不知道为什么?也许你在尝试更新?你知道吗

https://docs.djangoproject.com/en/2.2/ref/models/querysets/#django.db.models.query.QuerySet.update

网友
2楼 ·

从您选择的序列化程序类来看,似乎您正在使用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

这是未经测试,但它似乎应该工作。你知道吗

相关问题