У меня есть две простые модели и сериализаторы для Course
и Department
, как показано ниже: (Курс принадлежит отделу, то есть отношение «один к одному» от Course
до Department
)
# models.py
# Department Model
class Department(models.Model):
name = models.CharField(max_length=256)
location = models.CharField(max_length=1024)
# Course Model
class Course(models.Model):
code = models.CharField(max_length=15, unique=True)
name = models.CharField(max_length=15, unique=True)
department = models.ForeignKey(Department, on_delete=models.CASCADE, default=None,
null=True, blank=True)
###################################
# serializers.py
# Department serializer
class DepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = ['id', 'name']
# Course serializer
class CourseSerializer(serializers.ModelSerializer):
department = DepartmentSerializer()
class Meta:
model = Course
fields = '__all__'
После добавления некоторых курсов через SQL Запросы я сделал GET
запрос к конечной точке localhost:8000/courses/
, который дает ожидаемый результат.
[
{
"id": 1,
"code": "SS240",
"name": "Sociology",
"department": {
"id": 1,
"name": "Humanities"
}
},
{
"id": 2,
"code": "CS310",
"name": "Data Structures and Algorithms",
"department": {
"id": 5,
"name": "Computer Sciences"
}
}
]
Я хочу сделать POST
запрос до конечной точки localhost:8000/courses/
. Скажем, у меня есть отдел с name = Computer Sciences с id = 5 . Я хочу добавить курс с code = CS330, name = объектно-ориентированный дизайн, отдел = компьютерные науки . Как мне написать тело запроса?
Следующее дает ошибку из-за вложенного представления отдела
{
"code": "CS330",
"name": "Object Oriented Design",
"department": 5
}
Должно ли это быть так?
{
"code": "CS330",
"name": "Object Oriented Design",
"department": {
"id": 5,
"name": "Computer Sciences"
}
}
Как переопределить метод .create()
?