【问题标题】:How to filter by nested field in Django如何在 Django 中按嵌套字段进行过滤
【发布时间】:2021-04-22 04:47:42
【问题描述】:

我正在使用 Django Rest Framework 做一个小项目,我有两个模型

class Task(models.Model):
    status = models.ForeignKey(Status, related_name="tasks",  on_delete=models.CASCADE)
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    title = models.CharField(max_length=60, blank=False, null=False)

class Status(models.Model):
    title = models.CharField(blank=False, null=False, max_length=255)
    slug = models.CharField(blank=False, null=False, max_length=255)
    order = models.SmallIntegerField(default=0)

    def __str__(self):
        return self.title

这是我的序列化器:

class TaskSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Task
        fields = '__all__'
        

class StatusSerializer(serializers.ModelSerializer):
    tasks = TaskSerializer(many=True)
    class Meta:
        model = Status
        fields = '__all__'

这是我的视图代码:

def list(self, request):
        objectSerializer = StatusSerializer(Status.objects.all(), many=True)
        return Response(objectSerializer.data)

直到我对我创建的数据结构感到满意之前,我现在想在我的视图中创建另一个函数来按 (contact) 进行过滤,如您所见,这是一个外键

【问题讨论】:

标签: python django


【解决方案1】:

我找到了解决方案,

@action(methods=['get'], detail=False)
def contactRalatedTasks(self, contactID):
    queryset = Status.objects.prefetch_related(Prefetch('tasks', queryset = Task.objects.filter(contact=contactID))).all()
    s = StatusSerializer(queryset, many = True)
    return s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多