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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
