如何从django rest framework browsable API中的相关表中获取数据

时间:2014-12-16 09:30:48

标签: django angularjs django-rest-framework

我需要通过Angularjs填充表单,该表单应该从API获取数据。 API应返回用户表中的数据以及静态表(计划,国家)中通过外键与用户表相关的数据。

串行器:

class CountrySerializer(serilizers.ModelSerializer):
    class Meta:
       model = Country
       queryset = Country.objects.all()
       fields = ('id','name')   

class PlanSerializer(serializers.ModelSerializer):
    class Meta:
       model = Plan
       queryset = Plan.objects.all()
       fields = ('id','details')

class UserSerializer(serializers.ModelSerializer):
    plan = PlanSerializer()
    conutry = CountrySerializer()
    class Meta:
        model = User
        fields = ('name','plan','role','country',)

我的用户模型:

class User(models.Model):
   name = models.CharField(max_length = 60)
   role = models.ForeignKey(User_Role, null = True, blank = True)
   plan = models.ForeignKey(Plan, null = True, blank = True)
   country = models.ForeignKey(Country, null = True, blank = True)

我将调用Angularjs的UserSerializer API,该API应返回用户的姓名,计划,角色,国家以及相应表格中的其他计划,国家/地区列表。

基本上我需要为用户更新计划,国家/地区,因此我需要从计划/国家/地区表中获取其他计划/国家/地区详细信息,以便我可以发送PUT / PATCH请求来更新它。它与Django rest框架可浏览的API HTML表单(用于PUT)非常相似,除了我使用Angularjs从服务器获取数据。

我想要的只是一个API,它为相应的用户选择数据,这些数据也从其他静态表(计划,国家/地区表)获取更多数据,这些数据有助于更新某些字段(如计划,国家/地区)。

2 个答案:

答案 0 :(得分:2)

你在这里想要实现的目标(在同一个响应中返回不同类型的objets)并不是非常符合REST的概念,所以“django-rest-framework”不太可能让你这样做。

您可能应该在此处进行3次API调用:

  • 1获取用户
  • 1获取国家/地区列表
  • 1获取计划清单

答案 1 :(得分:0)

您很好,让n-api调用不是最好的主意。 您可以使用Django REST framework nested serialization

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('name','plan','role','country',)
        depth = 1