如何创建一个API,该API可以保存外键允许的许多字段

时间:2019-05-11 05:04:30

标签: django-rest-framework

用于选择的API仅允许外键上的许多字段。 例: 有一个“应用”模型,该模型的字段为“部门”:选项包括IT,银行业务,航空航天等。 根据所选的部门,只能为该部门定义一组特定的角色,以选择要申请的角色。

型号:

class Role(models.Model):
    role = models.CharField(max_length=255, primary_key=True)

    def __str__(self):
        return self.role

class Sector(models.Model):
    sector = models.CharField(max_length=255)
    role = models.ManyToManyField(Role)

    def __str__(self):
        return self.sector

class Apply(models.Model):
    name = models.CharField(max_length=255)
    experience = models.IntegerField()
    sector = models.ForeignKey(Sector, on_delete=models.CASCADE)
    role = models.ManyToManyField(Role)

    def __str__(self):
        return self.name

序列化器:

class RoleSerializer(ModelSerializer):

    class Meta:
        model = Role
        fields = ('role', )

class SectorSerializer(ModelSerializer):

    class Meta:
        model = Sector
        fields = ('sector', 'role', )

class ApplySerializer(ModelSerializer):

    class Meta:
        model = Apply
        fields = ('name', 'experience', 'sector', 'role')

但是,它甚至允许申请IT部门的人申请为航空航天部门定义的飞行员角色。是否可以使API使得仅允许申请特定部门的人员申请为该部门定义的角色?

例如对于以下为部门定义的角色:

IT “开发人员”,“测试人员”,“支持”

银行 “收银员”,“分支经理”,“客户支持”,“贷款经理”

航空航天 “飞行员”,“客舱乘员”,“地面支持”,“票务支持”

以下用于通过api进行POST请求的有效负载-/ api / apply_job应该视为有效,因为“开发人员”和“测试人员”都是通过IT部门的有效定义角色:

{
    "name": "first last"
    "experience": 10
    "sector": "IT"
    "role": [
        "developer",
        "tester"
    ]
}

下面的POST请求有效负载应失败,因为角色“飞行员”对于“ IT”部门无效:

{
    "name": "first last"
    "experience": 10
    "sector": "IT"
    "role": [
        "developer",
        "tester",
        "pilot"
    ]
}

有帮助吗?

0 个答案:

没有答案