答えて

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) 
2

をあなたはこのように、モデルフィールドにバリデータを追加することができます。

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 obje実際にはdictです。

+1

ありません、これは動作しませんしてみてください。まず第一に、 'JSONField'を' ArrayField'の内部に持つことはできません。それはエラーを投げます! –

+1

私は提供されたコードが動作していると仮定していました。 JSONFieldのみを使用し、バリデーターを使用できます。そのポイントは、正確な解決策を提供するのではなく、アイデアを提供することでした。乾杯。 – Joaquin

+1

ねえ!それを指摘していただきありがとうございます。私はそれを編集した。実際、私はあなたに2週間前に同様のコードを実装しました。しかし、今より良い方法があるかどうか疑問に思っていました:)返信する時間を取ってくれてありがとう。もし私が失礼だったら申し訳ありません。 –

0

強制的に保存メソッドをオーバーライドするだけではどうですか?

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? 
関連する問題