Django API:为UnitTest获取嵌套的Json

时间:2019-06-23 09:43:35

标签: django python-3.x django-rest-framework

我有api端点,并且无法从嵌套的json中获取项...

我正在编写这样的测试并打印出我看到的数据:

// render the mesh using the supplied shader and matrix
        public void Render( Shader shader, Matrix4 transform, Texture texture)
        {
            // on first run, prepare buffers
            Prepare( shader );

            // safety dance
            GL.PushClientAttrib( ClientAttribMask.ClientVertexArrayBit );

            // enable texture
            int texLoc = GL.GetUniformLocation( shader.programID, "pixels" );
            GL.Uniform1( texLoc, 0 );
            GL.ActiveTexture( TextureUnit.Texture0 );
            GL.BindTexture( TextureTarget.Texture2D, texture.id );

            // enable shader
            GL.UseProgram( shader.programID );

            // pass the cubesamplers.For now only pass one of them to test
            int map3Loc = GL.GetUniformLocation(shader.programID, "lamp3Map");
            GL.Uniform1(map3Loc,  0);
            GL.ActiveTexture(TextureUnit.Texture1);
            GL.BindTexture(TextureTarget.TextureCubeMap, Scene.lights[3].texId);

            // pass lamps to vertex shader
            Matrix2x3 lamp1data = new Matrix2x3(Scene.lights[0].node.myTrans.Row3.Xyz, Scene.lights[0].color);
            GL.UniformMatrix2x3(shader.uniform_lamp1, false, ref lamp1data);
            Matrix2x3 lamp2data = new Matrix2x3(Scene.lights[1].node.myTrans.Row3.Xyz, Scene.lights[1].color);
            GL.UniformMatrix2x3(shader.uniform_lamp2, false, ref lamp2data);
            Matrix2x3 lamp3data = new Matrix2x3(Scene.lights[2].node.myTrans.Row3.Xyz, Scene.lights[2].color);
            GL.UniformMatrix2x3(shader.uniform_lamp3, false, ref lamp3data);
            Matrix2x3 lamp4data = new Matrix2x3(Scene.lights[3].node.myTrans.Row3.Xyz, Scene.lights[3].color);
            GL.UniformMatrix2x3(shader.uniform_lamp4, false, ref lamp4data);



           // Console.WriteLine(lamp1data.Row0.ToString());

            //Matrix2x3 lamp1 = new Matrix2x3(lamp, new Vector3(1, 1, 1));  //pos, color

            // pass transform to vertex shader
            GL.UniformMatrix4( shader.uniform_mview, false, ref transform );

            // enable position, normal and uv attributes
            GL.EnableVertexAttribArray( shader.attribute_vpos );
            GL.EnableVertexAttribArray( shader.attribute_vnrm );
            GL.EnableVertexAttribArray( shader.attribute_vuvs );

            // bind interleaved vertex data
            GL.EnableClientState( ArrayCap.VertexArray );
            GL.BindBuffer( BufferTarget.ArrayBuffer, vertexBufferId );
            GL.InterleavedArrays( InterleavedArrayFormat.T2fN3fV3f, Marshal.SizeOf( typeof( ObjVertex ) ), IntPtr.Zero );

            // link vertex attributes to shader parameters 
            GL.VertexAttribPointer( shader.attribute_vuvs, 2, VertexAttribPointerType.Float, false, 32, 0 );
            GL.VertexAttribPointer( shader.attribute_vnrm, 3, VertexAttribPointerType.Float, true, 32, 2 * 4 );
            GL.VertexAttribPointer( shader.attribute_vpos, 3, VertexAttribPointerType.Float, false, 32, 5 * 4 );

            // bind triangle index data and render
            GL.BindBuffer( BufferTarget.ElementArrayBuffer, triangleBufferId );
            GL.DrawArrays( PrimitiveType.Triangles, 0, triangles.Length * 3 );

            // bind quad index data and render
            if( quads.Length > 0 )
            {
                GL.BindBuffer( BufferTarget.ElementArrayBuffer, quadBufferId );
                GL.DrawArrays( PrimitiveType.Quads, 0, quads.Length * 4 );
            }

            // restore previous OpenGL state
            GL.UseProgram( 0 );
            GL.PopClientAttrib();
        }

运行此命令时,我在 class TestSingleArticle(TestCase): def setUp(self): article = ArticleFactory2.create() self.url = reverse('article-single2', args=[article.alias]) def test_single_article_get(self): request = self.client.get(self.url) print(request.data)

中看到以下json
terminal

我正在尝试从{ 'alias': '508674f2-b570-47f1-b1d8-01592a3af359', 'author': OrderedDict([('id', 1), ('organization', OrderedDict([('id', 1), ('organization_name', 'org name'), ('contact', '256644')])), ('name', 'jhon doe'), ('detail', 'this is detail')]), 'category': OrderedDict([('id', 1), ('name', 'sci-fi')]), 'title': 'i am title', 'body': 'i am body' } 上方抢走contact,但我失败了。...


如果您不理解上述说明,请为您查看这些可选提示。

这是我的序列化类:

json

以下是我的模型:

    from rest_framework import serializes
    from . models import Author, Article, Category, Organization


    class OrganizationSerializer(serializers.ModelSerializer):
        class Meta:
            model = Organization
            fields = '__all__'


    class AuthorSerializer(serializers.ModelSerializer):
        organization = OrganizationSerializer():
        class Meta:
            model = Author
            fields = '__all__'


    class CategorySerializer(serializers.ModelSerializer):
        class Meta:
            model = Category
            fields = '__all__'


    class ArticleSerializer(serializers.ModelSerializer):
        author = AuthorSerializer()
        category = CategorySerializer()
        class Meta:
            model =  Article
            fields = '__all__'

无论如何,我想从嵌套的json中抓取 from django.db import models import uuid class Organization(models.Model): organization_name = models.CharField(max_length=50) contact = models.CharField(max_length=12, unique=True) def __str__(self): return self.organization_name class Author(models.Model): name = models.CharField(max_length=40) detail = models.TextField() organization = models.ForeignKey(Organization, on_delete=models.DO_NOTHING) def __str__(self): return self.name class Category(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Article(models.Model): alias = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='author') title = models.CharField(max_length=200) body = models.TextField() category = models.ForeignKey(Category, on_delete=models.CASCADE) ,在这种情况下有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先,您可以在format函数调用中指定一个self.client.get并将其设置为JSON:

request = self.client.get(self.url, format='json')

之后,您可以像这样简单地获取您的联系人:

contact = request.data['author']['organization']['contact']