私はそれらに答えることをしようとするでしょう:
Q:deconstruct()
が使用されていますか?
A:あなたは再作成、それはあなただけ__init__
に渡される引数をもとにしてくださいField
のインスタンスを持っている場合この方法が使用されています。 docsに記載されているように、max_length
argを__init__
メソッドの静的な値に設定すると、あなたのインスタンスのためにそれを必要としません。だからあなたのdeconstruct()
メソッドで削除することができます。これにより、max_length
はモデルで使用している間はインスタンスに表示されません。モデルでフィールドを使用する前に、最後の清掃と管理場所としてdeconstruct
を考えることができます。
Q:差A
db_type()
間とget_internal_type()
:それらは両方とも関連するが、異なるレベルに属します。
カスタムフィールドのデータ型が使用しているDBによって異なる場合、db_type()
は、コントロールを実行できる場所です。ここでもdocsに記載されているように、フィールドが一種の日付/時刻値である場合、この方法で現在のデータベースがPostgreSQL
またはMySQL
であるかどうかを確認する必要があります。 PostgreSQL
にはtimestamp
という日付/時刻値がありますが、MySQL
にはdatetime
と呼ばれています。
get_internal_type
は、db_type()
の上位バージョンの一種です。日付/時刻の値の例を見てみましょう:各データ型が異なるデータベースに属しているかどうかをチェックして制御したくない場合は、built-in
Djangoフィールドからカスタムフィールドのデータ型を継承できます。それがdatetime
かtimestamp
であるかどうかを調べる代わりに。 get_internal_type
メソッドでは単にDateField
に戻ることができます。 docsに記載されているとおり、すでにdb_type
メソッドを作成している場合、ほとんどの場合、get_internal_type
メソッドは必要ありません。
Q:get_prep_value()
とget_db_prep_value()
間差A:これらの人はまた、db_type()
とget_internal_type()
間almost
同じロジックを共有します。まず第一に、これらの両方の方法は、db値をpython objects
に変換することを意味します。しかし、db_type
メソッドの場合と同様に、get_db_prep_value()
はbackend
の特定のフィールドタイプを表します。
Q:value_from_object()
とvalue_to_string()
間違い。ドキュメントから:value_from_object()
がドキュメント
Aに与えられていない
値は、シリアライザによってシリアライズされる方法をカスタマイズするには、 value_to_string()
を上書きすることができます。 value_from_object()
を使用するのは、シリアル化の前にフィールドの値を取得する最も良い方法です( )。
実際には、value_from_object
は文書化されている必要はありません。このメソッドは、シリアル化の前にフィールドの生の値を取得するために使用されます。このメソッドで値を取得し、value_to_string
メソッドでシリアル化する方法をカスタマイズします。彼らはdocsでサンプルコードを入れ
Q:両方from_db_value()
、value_to_string()
とto_python()
は、文字列からPythonオブジェクトを提供します。そして、なぜこれらの異なる方法が存在するのですか?
A:to_python()
は有効なPythonオブジェクトにフィールド値を変換しながら、value_to_string()
は、カスタムのシリアル化と文字列にフィールドの値を変換します。彼らはさまざまな仕事を表しています。
from_db_value
は、データベースによって返された値をpythonオブジェクトに変換します。実際にそれを聞いたことはありません。しかし、ドキュメントからthis partを確認してください。
データベース バックエンドはすでに正しいPythonのタイプ、または変換を行い バックエンド自体を返すように、この方法が最も組み込みの分野に使用されていません。
まだ最初の答えは、deconstruct()が呼び出されたときにはっきりしません。さらに、get_prep_value()とget_db_prep_value()も誤解を招く恐れがあります。ドキュメントでは、Python型からdbcolumn型への値の変換に使用されていると言われています。 –