Django序列化程序验证未触发

2024-09-27 01:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django模型上有一个选项字段:

VALID = 0
INVALID = 1
FLANGGED = 2
NOT_REVIEWED = 3

STATUS_CHOICES = (
    (VALID, 'Valid'),
    (INVALID, 'Invalid'),
    (FLANGGED, 'Flagged'),
    (NOT_REVIEWED, 'Not Reviewed'),
)

review_status = models.PositiveSmallIntegerField(
    choices=STATUS_CHOICES, default=NOT_REVIEWED)

当我把它放到前端时,我使用obj.get_review_status_display()来获取字符串值

当我编辑这个模型(通过DRF)并传递整数值时,我可以看到序列化程序上的validate()方法被调用。但是,当我传递字符串值来修补模型时,validate()永远不会被调用:

def validate(self, data):
    valid_status_key = False
    if 'review_status' in data:
        for k, v in Application.STATUS_CHOICES:
            if v == data['review_status']:
                valid_status_key = k

        if not valid_status_key:
            raise serializers.ValidationError('Invalid review status')
        else:
            data['review_status'] = valid_status_key

    # only called when data['review_statuse'] is an Int, not String
    assert False, [data, valid_status_key]

    return data

所以。。。如何将字符串值传递到后端,并使用validate()方法根据我的选项字段验证它


Tags: key字符串模型dataif选项statusnot

热门问题