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)

 

posted @ 2022-03-23 21:00  Jaetyn  阅读(387)  评论(0编辑  收藏  举报