【问题标题】:how to access items by ForeignKey lookup field instead of pk?如何通过 ForeignKey 查找字段而不是 pk 访问项目?
【发布时间】:2018-02-01 10:05:38
【问题描述】:

在 django rest framework(DRF) 我想通过外键查找字段而不是 pk 访问项目 网址:\投资\\

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')

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

【问题讨论】:

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

标签: django django-rest-framework


【解决方案1】:

恕我直言,当前问题的最佳解决方案是使用方法investments 为您的模型Member 创建viewset,如果不存在则创建MemberSerializer

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)

在 urls.py 中

router.register(r'member', MemberViewSet)

你可能会通过 url /member/<member_pk>/investments/得到结果

更多详情,extra-link-and-actions

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 2017-12-15
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多