【发布时间】:2021-10-02 08:21:19
【问题描述】:
如何通过Project单API实现ProjectEmployee、Employee、EmployeeSpecialization、AvailableWorkField?所有这些都通过多对多关系连接。
这里我展示了一个简短的模型代码:
class Project(models.Model):
title = models.CharField(max_length=300, primary_key=True, unique=True)
class Employee(models.Model):
name = models.CharField(max_length=300, blank=True, null=True)
class AvailableWorkField(models.Model):
available_field_position = models.CharField(max_length=100)
class EmployeeSpecialization(models.Model):
employee = models.ForeignKey(Employee, related_name='employee_specialization_employee', on_delete=models.CASCADE)
preferred_field = models.ForeignKey(AvailableWorkField, related_name='employee_specialization_available_work_field',
on_delete=models.CASCADE)
class ProjectEmployee(models.Model):
project = models.ForeignKey(Project, related_name='project_employee_project', on_delete=models.CASCADE)
employee = models.ForeignKey(Employee, related_name='project_employee_employee', on_delete=models.CASCADE)
project_position = models.CharField(max_length=100)
这是我的序列化器:
class AvailableWorkFieldSerializers(serializers.ModelSerializer):
class Meta:
model = AvailableWorkField
fields = '__all__'
class EmployeeSpecializationSerializers(serializers.ModelSerializer):
employee_specialization_available_work_field = AvailableWorkFieldSerializers(many=True, read_only=True)
class Meta:
model = EmployeeSpecialization
fields = '__all__'
class EmployeeSerializers(serializers.ModelSerializer):
employee_specialization_employee = EmployeeSpecializationSerializers(many=True, read_only=True)
class Meta:
model = Employee
fields = '__all__'
class ProjectEmployeeSerializers(serializers.ModelSerializer):
project_employee_employee = EmployeeSerializers(many=True, read_only=True)
class Meta:
model = ProjectEmployee
fields = '__all__'
class ProjectSerializers(serializers.ModelSerializer):
project_employee_project = ProjectEmployeeSerializers(many=True, read_only=True)
class Meta:
model = Project
fields = '__all__'
我想要一个像这样的复杂嵌套 JSON 对象用于项目休息 API:
[
{
"title": "RevSurvey",
"project_employee_project": [
{
"id": 2,
"project_position": "Django",
"project": "RevSurvey",
"employee": {
"id": 1,
"name": "david",
"preferred_field": [
{
"id": 1,
"available_field_position": "Laravel"
}
]
}
}
]
}
]
但我期待得到:
[
{
"title": "RevSurvey",
"project_employee_project": [
{
"id": 2,
"project_position": "Django",
"project": "RevSurvey",
"employee": 1
}
]
}
]
【问题讨论】:
标签: django rest django-models django-rest-framework