【发布时间】:2014-10-19 03:35:16
【问题描述】:
我无法让 Django rest 框架创建具有依赖关系的对象。简而言之,这是适用于其他部分更新、删除和创建员工的简化配置。但是在使用 ForeignKey 为 Employee 创建 Case 时失败。
models.py
class Employee(models.Model):
firstName = models.CharField(max_length=50)
lastName = models.CharField(max_length=50)
class Case(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Employee, related_name='cases_created')
serializers.py
class SCase (serializers.HyperlinkedModelSerializer):
author = SEmployeeList(required = True)
class Meta:
model = models.Case
fields = ('url', 'title', 'author', 'id')
class SEmployee(serializers.HyperlinkedModelSerializer):
cases_created = SCaseList(many=True, required=False)
class Meta:
model = models.Employee
fields = ('url', 'firstName', 'lastName','cases_created', 'id')
views.py
class EmployeeViewSet(viewsets.ModelViewSet):
queryset = models.Employee.objects.all()
serializer_class = serializers.SEmployee
class CaseViewSet(viewsets.ModelViewSet):
queryset = models.Case.objects.all()
serializer_class = serializers.SCase
问题是当我创建对象案例时,它必须引用作者。
- 传递现有对象会创建案例和新员工
发布
{"author":{"url":"http://localhost:8000/restbase/employee/23/",
"firstName":"Mark",
"lastName":"Hilton",
"cases_created":[],
"id":23},
"title":"New Case"
}
- 仅传递现有作者的 URL 失败,因为创建作者失败。
发布
{"author":"http://127.0.0.1:8000/restbase/employee/23/","title":"New Case"}
回应
{"author": [{"non_field_errors": ["Invalid data"]}]}
- 仅将 URL 作为作者字段传递会带来以下响应
发布
{"author":{"url":"http://127.0.0.1:8000/restbase/employee/23/"},"title":"New Case"}
回应
{"author": [{"lastName": ["This field is required."], "firstName": ["This field is required."]}]}
【问题讨论】:
标签: python django rest django-rest-framework