我有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)
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)
,在这种情况下有人可以帮助我吗?
答案 0 :(得分:0)
首先,您可以在format
函数调用中指定一个self.client.get
并将其设置为JSON:
request = self.client.get(self.url, format='json')
之后,您可以像这样简单地获取您的联系人:
contact = request.data['author']['organization']['contact']