我的模型如下:
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字段的内容进行这种验证?