# 员工模型类
class Staff(models.Model):
SEX_CHOICE = (
(1, '男'),
(0, '女')
)
name = models.CharField('姓名', max_length=20)
sex = models.SmallIntegerField('性别', default=1, choices=SEX_CHOICE)
phone = models.CharField('手机号', max_length=11)
email = models.EmailField('邮箱', max_length=50)
department = models.ForeignKey(Department, on_delete=models.CASCADE, verbose_name='部门')
duty = models.ForeignKey(Duty, on_delete=models.CASCADE, verbose_name="工作职责")
def __str__(self):
return self.name
class Meta:
db_table = "staff"
表中 sex 的选项1,0 在前端显示真实值: 男女
department 和 duty 外键 显示真实名称
# 员工序列化器
class StaffSer(ModelSerializer):
# 有choices 选项的字段 定义get_ 方法
sex_name = serializers.SerializerMethodField(read_only=True)
def get_sex_name(self, obj):
return obj.get_sex_display()
# 外键自定义 obj 代表当前需要序列化的对象
department_name = serializers.SerializerMethodField()
duty_name = serializers.SerializerMethodField()
def get_department_name(self, obj):
return obj.department.name # 此时obj就是部门对象 obj.对象.字段
def get_duty_name(self, obj):
return obj.duty.name
class Meta:
model = Staff
fields = '__all__'