【问题标题】:django rest framework posting object with relations fails to createdjango rest框架发布具有关系的对象无法创建
【发布时间】: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

问题是当我创建对象案例时,它必须引用作者。

  1. 传递现有对象会创建案例和新员工

发布

{"author":{"url":"http://localhost:8000/restbase/employee/23/",
           "firstName":"Mark",
           "lastName":"Hilton",
           "cases_created":[],
           "id":23},
 "title":"New Case"
}
  1. 仅传递现有作者的 URL 失败,因为创建作者失败。

发布

{"author":"http://127.0.0.1:8000/restbase/employee/23/","title":"New Case"}

回应

{"author": [{"non_field_errors": ["Invalid data"]}]}
  1. 仅将 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


    【解决方案1】:

    经过深入调查,有一个可行的解决方案。作者无法连载。

    class SCase (serializers.HyperlinkedModelSerializer):
        # removed line: author = SEmployeeList(required = True)
        class Meta:
            model = models.Case
            fields = ('url', 'title', 'author', 'id')   
    

    我仍然不知道如何使用详细信息和创建依赖元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2014-09-21
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多