Django序列化器中表关联查询
示例(一对多查询)
Serializer.py
class BusinessSerializer(serializers.ModelSerializer):
department = serializers.CharField(required=True,source="businessName")
childs=DepartmentSerializer(many=True,source="children",required=False,read_only=True)
layout=serializers.SerializerMethodField(required=False)
class Meta:
model = Business
fields=["id","layout","department","childs"]
def get_layout(self,obj):
return "1"
model.py
# 部门表
class Department(models.Model):
'''
部门分类
'''
department = models.CharField(verbose_name="部门名字", max_length=80, null=False)
departmentStatus = models.IntegerField(verbose_name="部门状态", choices=((1, "激活"), (0, "未激活")), default=1, null=False)
business = models.ForeignKey(to="Business", on_delete=models.CASCADE, max_length=80, null=True,
related_name="children")
class Meta:
db_table = "部门表"
app_label = "publicModels"
verbose_name_plural = "部门表"
def __str__(self):
return self.department
示例(多对一查询)
Serlializer.py
class StaffSerializer(serializers.ModelSerializer):
# mainmodule_set=MainModuleSerializer(many=True)
# mainmodule_set = serializers.StringRelatedField(many=True)
details=RoleSerializer(source="role")
# departmentId=DepartmentSerializer()
# test=serializers.SerializerMethodField('get_test')
class Meta:
model=Staff
# fields=["uid","username","password","role"]
# fields = "__all__"
# fields=["uid","role","departmentId"]
fields=["details"]
# def get_test(self,obj):
# test=Role.objects.get
# return test
model.py
# 员工表2
class Staff(models.Model):
# uid = models.IntegerField(primary_key=True, verbose_name="员工唯一标识", null=False) # 系统会自动生成唯一的一个uid
uid = models.AutoField(primary_key=True, null=False)
username = models.CharField(verbose_name="员工姓名", max_length=40, null=False, unique=True)
password = models.CharField(verbose_name="密码", max_length=200, null=False)
department = models.ForeignKey(to="Department", on_delete=models.SET_NULL, max_length=80, null=True)
role = models.ForeignKey(to="Role", verbose_name="角色", max_length=40, on_delete=models.SET_NULL, null=True)
createTime = models.DateTimeField(verbose_name="最后修改时间", auto_now=True)
staffStatus = models.IntegerField(verbose_name="在职状态", choices=((0, "非在职状态"), (1, "在职状态")),
help_text="0为非在职,1为在职状态", default=1, null=False)
email = models.EmailField(verbose_name="邮箱", max_length=30, null=False)
phoneNumber = models.CharField(verbose_name="手机号", max_length=20, null=False)
deleted_state = models.CharField(verbose_name='删除状态', max_length=10, choices=(('1', 'existence'), ('0', 'delete')),
null=False, default='1', help_text="1代表存在,0代表删除", db_index=True)
class Meta:
db_table = '员工信息表'
app_label = 'publicModels'
verbose_name_plural = "员工表"
def __str__(self):
return self.username
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
self.password = make_password(self.password)
super().save(force_insert=False, force_update=False, using=None, update_fields=None)