Django 如何通过ForeignKey查找字段而不是pk访问项目?
在django rest框架(DRF)中,我希望通过外键查找字段而不是pk来访问项 url:\investment\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
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/
更多细节
希望对您有所帮助您是如何尝试的。粘贴您的查询将帮助我们更好地理解您的问题。请将导致此错误的代码包括在完整的回溯中。对不起,我的英语不好。我想返回一个“投资”列表,使用“成员”查找字段您是如何尝试的。粘贴您的查询将帮助我们更好地理解您的问题。请将导致此错误的代码包括在完整的回溯中。对不起,我的英语不好。我要返回“投资”列表,请使用“成员”查找字段