Django REST框架通过FK获取列表视图

Django REST框架通过FK获取列表视图,django,django-rest-framework,Django,Django Rest Framework,我想要一个项目视图,只有投资的状态是“失败”或“取消”,但在上面代码中,结果中的所有投资不仅状态是“失败”或“取消”,如何做到这一点?您需要使用项目序列化器的序列化器方法字段中的过滤器,例如: class Project(models.Model): user = models.ForeignKey(USER) status = models.CharField(max_length=100, choices=(('NEW', 'NEW'), ('CLOSE', 'CLOSE')

我想要一个项目视图,只有投资的状态是“失败”或“取消”,但在上面代码中,结果中的所有投资不仅状态是“失败”或“取消”,如何做到这一点?

您需要使用
项目序列化器的序列化器方法字段中的过滤器,例如:

class Project(models.Model):
    user = models.ForeignKey(USER)
    status = models.CharField(max_length=100, choices=(('NEW', 'NEW'), ('CLOSE', 'CLOSE'), ('CANCEL', 'CANCEL')))

class Investment(models.Model):
    project = models.ForeignKey(Project)
    status = models.CharField(max_length=100, choices=(('BOOKED', 'BOOKED'), ('FAIL', 'FAIL'), ('CANCEL', 'CANCEL')))

class ProjectSerializer(serializers.ModelSerializer):
    investment = InvestmentSerializer(many=True)
    class Meta:
        model = Project
        fields = ('id', 'status', 'investment')

class ProjectView(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    serializer_class = ProjectSerializer
    def get_queryset(self):
        return Project.objects.filter(user=self.request.user, status__in= ['CLOSE', 'CANCEL'], investment__status__in=["FAIL", "CANCEL"]))

更多详细信息

简单我可以建议在
project=models.ForeignKey(project,related\u name='investment')上使用
相关的
class ProjectSerializer(serializers.ModelSerializer):
    investment = serializers.SerializerMethodField()

    def get_investment(self, obj):
         qs = obj.investment.filter(status__in=["FAIL", "CANCEL"])
         serializer = InvestmentSerializer(qs, many=True)
         return serializer.data