django-rest-framework – django rest framework可写嵌套序列化
发布时间:2020-12-20 13:10:21 所属栏目:Python 来源:网络整理
导读:我正在关注此链接( http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers)来编写嵌套的序列化程序.但是当我在HostSerializer的create方法中从validated_data弹出’vars’时,我发现它是空的. 我正在使用django 1.9.2和dja
我正在关注此链接(
http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers)来编写嵌套的序列化程序.但是当我在HostSerializer的create方法中从validated_data弹出’vars’时,我发现它是空的.
我正在使用django 1.9.2和django restframework 3.3.2. 我的模特: class Host(models.Model): name = CharField(max_length=20,primary_key=True) vm_cpu = IntegerField(default=2) vm_mem = IntegerField(default=2048) create_vm = BooleanField(default=True) def __unicode__(self): return('%s' % (self.name)) class Variable(models.Model): name = CharField(max_length=10) value = CharField(max_length=20) host = models.ForeignKey(Host,related_name='vars') def __unicode__(self): return('%s=%s' % (self.name,self.value)) 串行 class VariableSerializer(ModelSerializer): class Meta: model = Variable class HostSerializer(ModelSerializer): vars = VariableSerializer(many=True) class Meta: model = Host def create(self,validated_data): # i set a break point here and found vars_data is empty vars_data = validated_data.pop('vars') host = Host.objects.create(**validated_data) for v in vars_data: Variable.objects.create(host = host,**v) return host 这是我发现的问题vars_data是一个空列表: def create(self,validated_data): # i set a break point here and found vars_data is empty vars_data = validated_data.pop('vars') 这是代码的其余部分 admin.py class VariableAdmin(admin.ModelAdmin): list_display = ['name','value'] class HostAdmin(admin.ModelAdmin): list_display = ['name'] admin.site.register(Variable,VariableAdmin) admin.site.register(Host,HostAdmin) urls.py router = DefaultRouter() router.register(r'variables',VariableViewSet,base_name='variables') router.register(r'hosts',HostViewSet,base_name='hosts') urlpatterns = [ url(r'^',include(router.urls)),] views.py class VariableViewSet(ModelViewSet): queryset = Variable.objects.all() serializer_class = VariableSerializer class HostViewSet(ModelViewSet): queryset = Host.objects.all() serializer_class = HostSerializer 我的测试程序 post.py import json import requests file = 'host.json' url = 'http://localhost:8001/test_nest/hosts/' with open(file,'r') as f: j = f.read() data = json.loads(j) r = requests.post(url,data = data) print r.text 这是测试数据 host.json { "name": "host4","vars": [ { "name": "var2-a","value": "a1" },{ "name": "var2-b","value": "a2" } ],"vm_cpu": 2,"vm_mem": 2048,"create_vm": true } 我是django的新手.所以我想知道它是否简单明了.我使用了错误的视图吗?我发布了错误的网址吗?或者我设置错误的URL结构? 解决方法
我的序列化器尝试使用…
def update(self,instance,validated_data): instance.vars_data = validated_data.get('vars',instance.vars) instance.host = Host.objects.create(**validated_data) for v in vars_data: v,created=Variable.objects.create(host = host,**v) instance.v.add(v) return host (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |