DJANGO REST框架获取fk的列表视图


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"]))

我想要一个项目视图,只有投资的状态是"失败"或"取消",但上面的代码上的所有投资不仅是"失败"或"取消",如何执行此操作?

您需要在ProjectSerializer的序列化方法内使用过滤器:

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

更多详细信息Serializerthodfield

最新更新