sql >> データベース >  >> RDS >> PostgreSQL

Django 1.9では、JSONField(ネイティブpostgres jsonb)を使用するための規則は何ですか?

    Djangoコードから暗示される規則は、nullJSON値をNULLとして保存することのようです。 空の文字列としてではなく(CharFieldの規則と同様) )。私はこれを次の理由で言います:

    empty_strings_allowed Fieldから継承されます CharField内 、およびTrueに設定されます :

    django / db / models / fields /__init__.py#L96

    class Field(RegisterLookupMixin):
        """Base class for all field types"""
    
        # Designates whether empty strings fundamentally are allowed at the
        # database level.
        empty_strings_allowed = True
        ...
    

    JSONField ただし、Falseで上書きします :

    django / contrib / postgres / fields /jsonb.py#L13

    class JSONField(Field):
        empty_strings_allowed = False
        ...
    

    これにより、CharFieldが発生します のデフォルトは"" およびJSONFieldNone これらのフィールドの値を明示的に渡さずにモデルをインスタンス化する場合。

    django / db / models / fields / init .py#L791

    def get_default(self):
        """
        Returns the default value for this field.
        """
        if self.has_default():
            if callable(self.default):
                return self.default()
            return self.default
        if (not self.empty_strings_allowed or (self.null and
                   not connection.features.interprets_empty_strings_as_nulls)):
            return None
        return ""
    

    したがって、JSONFieldを作成する場合 オプションで、以下を使用する必要があります:

    json_field = JSONField(blank=True, null=True)
    

    blank=Trueのみを使用する場合 、CharFieldの場合と同じように 、IntegrityErrorが表示されます MyModel.objects.create(...)を実行しようとしたとき json_fieldを渡さずに 明示的に引数。



    1. DjangoでMySQLからの部分的な日付(2010-00-00)を処理するにはどうすればよいですか?

    2. 合計列のパーセンテージを計算するためのMySQLクエリ

    3. 主キーを持つリンクテーブルを追加するVBAコード

    4. 特定の行の周りのSQL選択ウィンドウ