Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从django rest framework browsable API中的相关表中获取数据_Django_Angularjs_Django Rest Framework - Fatal编程技术网

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

如何从django rest framework browsable API中的相关表中获取数据,django,angularjs,django-rest-framework,Django,Angularjs,Django Rest Framework,我需要通过Angularjs填充表单,它应该从API获取数据。API应该从用户表返回数据,也应该从静态表(计划、国家)返回数据,这些表通过外键与用户表相关 序列化程序: class CountrySerializer(serializers.ModelSerializer): class Meta: model = Country queryset = Country.objects.all() fields = ('id','name')

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

序列化程序:

class CountrySerializer(serializers.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,它将从相应的表中返回用户名、计划、角色、国家以及其他计划、国家的列表

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


我想要的只是一个API,它可以为相应的用户选择数据,还可以从其他静态表(plan,country表)获取额外的数据,这些表有助于更新某些字段(如plan,country)。

您在这里试图实现的目标(在同一响应中返回不同类型的对象)不太符合REST的思想,所以“django REST框架”不太可能允许您这样做

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

  • 1以获取用户
  • 1获取国家列表
  • 1获取计划列表

    • 你说得对,获取n-api调用这不是最好的主意。 你可以用


      你能更准确地描述问题是什么吗?i、 e.您从API中得到的与您期望的相比究竟是什么。@ThomasOrozco Iam拥有一个API,在加载页面时,该API将为用户(比如用户1)获取详细信息,如他的姓名、计划、国家等。计划和国家是计划和国家表中用户表的外键。我希望api返回与user1对应的行,并且它还应该从Plan和Country表中选取所有数据并一起发送。现在得到的是json{'name':'xxx','Plan':{'id':1,'desc':'test1'},'Country':{'id':1,'name':'USA'}我需要的是{'name':'xxx','Plan':{'id':1,'desc test1','Country':{'id':1,'name':'USA'}+{'plan':[{'id':1,'desc':'test1'},{'id':2,'desc':'test2'},{'id':3,'desc':'test4'}],'country':[{'id':1,'name':'USA'},{'id':2,'name':'UK'},{'id':3,'name':'FRANCE'}谢谢Thomas,仅仅加载一个表单就获得n-api调用是明智的吗?我有10个静态表,所有这些数据都是单个表单所需的。您建议我编写10+1 api调用以从服务器获取所有静态数据和用户相关数据。另外,我通过angularJS@mithu这样做比较简单;从这一点开始,对性能进行基准测试,并优化您已经确定的一个,以确定这是否是一个瓶颈。请记住,JavaScript将使请求并行(不过,肯定会有一些开销,因为必须建立多个连接,并且您不能对单个服务器有无限数量的请求)考虑使用缓存来减少这些请求。谢谢。这样做应该在一个API调用中实现。
      class UserSerializer(serializers.ModelSerializer):
          class Meta:
              model = User
              fields = ('name','plan','role','country',)
              depth = 1