Django 如何通过ForeignKey查找字段而不是pk访问项目?

Django 如何通过ForeignKey查找字段而不是pk访问项目?,django,django-rest-framework,Django,Django Rest Framework,在django rest框架(DRF)中,我希望通过外键查找字段而不是pk来访问项 url:\investment\\ class InvestmentListViewSet(viewsets.ModelViewSet): queryset = Investment.objects.all() serializer_class = InvestmentSerializer lookup_field = 'member' 但是有一个错误: investment.model

在django rest框架(DRF)中,我希望通过外键查找字段而不是pk来访问项 url:\investment\\

class InvestmentListViewSet(viewsets.ModelViewSet):
    queryset = Investment.objects.all()
    serializer_class = InvestmentSerializer
    lookup_field = 'member'
但是有一个错误:

investment.models.MultipleObjectsReturned: get() returned more than one 
Investment -- it returned 6!
这是我的模型和序列化程序

class Investment(models.Model):
    member = models.ForeignKey(Member)
    project = models.ForeignKey(Project)
    time = models.DateField(default=datetime.now)

class InvestmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Investment
        fields = ('time','member', 'project')

如何使用外键成员返回投资列表?

对于当前问题,我的最佳解决方案是使用方法
投资为您的模型
成员创建
viewset
,如果不存在,则创建成员序列化程序

from rest_framework.response import Response
from rest_framework.decorators import detail_route


class MemberViewSet(viewsets.ModelViewSet):
    queryset = Member.objects.all()
    serializer_class = MemberSerializer

    @detail_route(methods=['get'], )
    def investments(self, request, pk):
        qs = self.get_object().investment_set.all()
        serializer = InvestmentSerializer(qs, many=True)
        return Response(serializer.data)
在URL.py中

router.register(r'member', MemberViewSet)
您可以通过url
/member//investments/

更多细节


希望它能帮助您

对于当前问题的最佳解决方案是使用方法
投资为您的模型
成员创建
视图集
,如果不存在,创建成员序列化程序

from rest_framework.response import Response
from rest_framework.decorators import detail_route


class MemberViewSet(viewsets.ModelViewSet):
    queryset = Member.objects.all()
    serializer_class = MemberSerializer

    @detail_route(methods=['get'], )
    def investments(self, request, pk):
        qs = self.get_object().investment_set.all()
        serializer = InvestmentSerializer(qs, many=True)
        return Response(serializer.data)
在URL.py中

router.register(r'member', MemberViewSet)
您可以通过url
/member//investments/

更多细节


希望对您有所帮助

您是如何尝试的。粘贴您的查询将帮助我们更好地理解您的问题。请将导致此错误的代码包括在完整的回溯中。对不起,我的英语不好。我想返回一个“投资”列表,使用“成员”查找字段您是如何尝试的。粘贴您的查询将帮助我们更好地理解您的问题。请将导致此错误的代码包括在完整的回溯中。对不起,我的英语不好。我要返回“投资”列表,请使用“成员”查找字段