使用外键Django Rest框架创建记录
DRF3.7.1的新版本,我在尝试使用POST创建包含外键的对象时遇到了一个问题。场景是我有一个学生-学校模型(一个学校有很多学生)-示例如下:使用外键Django Rest框架创建记录,django,serialization,django-rest-framework,Django,Serialization,Django Rest Framework,DRF3.7.1的新版本,我在尝试使用POST创建包含外键的对象时遇到了一个问题。场景是我有一个学生-学校模型(一个学校有很多学生)-示例如下: class School(models.Model): school_id = models.CharField(primary_key=True,max_length=10) school_name = models.CharField(max_length=100) school_address = models.CharF
class School(models.Model):
school_id = models.CharField(primary_key=True,max_length=10)
school_name = models.CharField(max_length=100)
school_address = models.CharField(max_length=255)
# other fields omitted
class Student(models.Model):
student_name = models.CharField(max_length=100)
# other fields omitted
school = models.ForeignKey('School')
序列化程序如下所示:
class SchoolSerializer(serializers.ModelSerializer):
class Meta:
model = School
fields = ('school_id','school_name','school_address')
class StudentSerializer(serializers.ModelSerializer):
school = SchoolSerializer()
class Meta:
model = Student
fields = ('student_name','school')
假设学校存在(school_id='ABC'),我将尝试发布此JSON以创建学生:
{
"student_name": "John Doe",
"school_id": "ABC"
}
但是我得到了一个错误:
断言错误at/mytest/
默认情况下,.create()
方法不支持可写嵌套字段。
为序列化程序myapp.serializer.StudentSerializer
编写一个显式的.create()
方法,或在嵌套的序列化程序字段上设置read\u only=True
不确定如何修复此问题-我应该为学校外键引用什么
提前感谢您需要创建一个显式的
create
方法,因为默认情况下DRF不会为您这样做。例如:
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ('student_name','school')
def create(self, data):
school, __ = School.objects.get_or_create(school_id=data["school_id"])
return Student(student_name=data["student_name"], school=school)