6

我的课看起来像这样:

class Foo(models.Model):
  known_by = JSONField()

我的数据看起来像这样

{ "known_by" : [
                {'by':'name1', 'value':['def']},
                {'by':'name2', 'value':['bar']}
               ]
}

我有什么办法可以强制Jsonfield要求遵循by,value[]dict 的格式。我知道如何使用serialiazers

还有其他更简洁的方法来强制执行此操作(在模型定义本身中)?谢谢

4

3 回答 3

4

您可以向模型字段添加验证器,如下所示:

 class Foo(models.Model):
     known_by = ArrayField(JSONField(max_length=100), size=4, validators=[a_json_array_validator])

验证器是:

def a_json_array_validator(value):
    if any([not is_json_valid(entry) for entry in value]):
        raise ValidationError(
            _('%(value) is not a valid json'),
            params={'value': value},
         )

(实际的 json 验证取决于您);-) 请注意,验证器接收 python 对象,因此它实际上是一个 dict。

于 2017-04-20T23:43:50.680 回答
1

你可以这样实现它:

from django.db import models

class Bar(models.Model):
    by = models.CharField()
    value = models.ArrayField()


class Foo(models.Model):
    known_by = models.ForeignKey(Bar, on_delete=models.CASCADE)
于 2017-04-18T23:17:41.840 回答
0

为什么不直接覆盖 save 方法来执行呢?

class Foo(models.Model):
    known_by = JSONField()

    def save(self, *args, **kwargs):
        # begin validation code

        # end validation code
        if valid:
            super(Model, self).save(*args, **kwargs)
        else:
            # something else, maybe http error code?
于 2017-04-26T18:29:49.433 回答