繁体   English   中英

带有嵌套字段过滤器的 Django 模型实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM