如果内容相同但顺序不同,UniqueTogetherValidator在JSONfield上将失败

时间:2019-05-14 17:06:51

标签: django-rest-framework

我的模型如下:

from django_mysql.models import JSONField

class Apply(models.Model):
    name = models.CharField(max_length=20)
    role = JSONField()

    def __str__(self):
        return self.name

我不想让一个名字叫“约翰”的人两次申请相同的职位。因此,我在(“名称”,“角色”,)上有一个UniqueTogetherValidator

在序列化器中:

class ApplySerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Apply
        fields = ('id', 'name', 'role')
        validators = [
            UniqueTogetherValidator(
                queryset=models.Apply.objects.all(),
                fields=('name', 'role')
            )
        ]

但是,如果第二个条目在传递的JSON中具有相同的字段,但顺序不同,则unique_together会失败,并将其视为另一个条目并允许POST。

例如:

使用API​​的现有数据库条目

+----+--------+---------------------+
| id | name   |role                 |
+----+--------+---------------------+
|  1 | abcd   |["cashier", "clerk"] |
+----+--------+---------------------+

验证应该是这样的,因为数据顺序不同,另一个具有以下数据的POST请求应该失败,因为在数据库表的上一个条目中已经存在由同一人选择的角色。

+----+--------+---------------------+
| id | name   |role                 |
+----+--------+---------------------+
|  2 | abcd   |["clerk", "cashier"] |
+----+--------+---------------------+ 

如何使用json字段的内容进行这种验证?

0 个答案:

没有答案