我想构造一个类似于结构的二叉树(使用反向关系)
report_to字段为null的雇员位于树的顶部(A级),使用反向序列化程序,我可以获取其受控雇员列表(B级)。但是,如果B级雇员正在控制某些雇员,则我必须反向关联该雇员列表(C级)。一些B级员工可能有也可能没有员工向他们报告。那么C级员工可能有也可能没有员工向他们报告,因此直到最后一位员工为止,树会长大。
我有一个员工表和job_info表
class employee(models.Model):
first_name = models.CharField(max_length = 50)
last_name = models.CharField(max_length = 50)
class job_info(models.Model):
employeeid = models.OneToOneField(employee, on_delete = models.CASCADE)
report_to = models.ForeignKey(employee, on_delete = models.SET_NULL,related_name = "supervisor", null = True)
如果我需要找到数量有限的反向序列化器,则可以编写所需数量的反向关系序列化器。但就我而言,这棵树可能是(0级)到(N级)。那么我该如何写一个可以处理N个反向序列化器的序列化器
答案 0 :(得分:2)
想到这一点的快速方法是 SerializerMethodField 。 像这样:
class Employee(models.Model):
first_name = models.CharField(max_length = 50)
last_name = models.CharField(max_length = 50)
class JobInfo(models.Model):
employee = models.OneToOneField(Employee, related_name='get_job_info')
supervisor = models.ForeignKey(Employee, related_name='get_sub_employees_info')
class JobTreeSerializer(serializers.ModelSerializer):
class Meta:
model = JobInfo
fields = ('employee', 'sub_employees')
sub_employees = serializers.SerializerMethodField()
def get_sub_employees(self, job_info):
return __class__(job_info.employee.get_sub_employees_info.all(), many=True).data
请注意__class__引用JobTreeSerializer,就像在嵌套相同的序列化器一样。