フィールドオプション
次の引数は、すべてのフィールドタイプで使用できます。 すべてオプションです。
null
- Field.null
True
の場合、Djangoは空の値をNULL
としてデータベースに保存します。 デフォルトはFalse
です。
CharField や TextField などの文字列ベースのフィールドで null を使用することは避けてください。 文字列ベースのフィールドにnull=True
がある場合、それは「データなし」の2つの可能な値があることを意味します:NULL
と空の文字列。 ほとんどの場合、「データなし」に2つの可能な値を設定することは冗長です。 Djangoの規則では、NULL
ではなく、空の文字列を使用します。 1つの例外は、 CharField にunique=True
とblank=True
の両方が設定されている場合です。 この状況では、空白の値で複数のオブジェクトを保存するときに一意の制約違反を回避するために、null=True
が必要です。
null パラメータはデータベースストレージにのみ影響するため、文字列ベースのフィールドと非文字列ベースのフィールドの両方で、フォームに空の値を許可する場合は、blank=True
も設定する必要があります( 空白を参照)。
ノート
Oracleデータベースバックエンドを使用する場合、値NULL
は、この属性に関係なく、空の文字列を示すために格納されます。
blank
- Field.blank
True
の場合、フィールドは空白にすることができます。 デフォルトはFalse
です。
これは null とは異なることに注意してください。 null は純粋にデータベース関連ですが、 blank は検証関連です。 フィールドにblank=True
がある場合、フォームの検証では空の値を入力できます。 フィールドにblank=False
がある場合、そのフィールドは必須です。
choices
- Field.choices
正確に2つのアイテムの反復可能オブジェクトで構成されるシーケンス(例: [(A, B), (A, B) ...]
)このフィールドの選択肢として使用します。 選択肢が指定されている場合、それらはモデル検証によって適用され、デフォルトのフォームウィジェットは、標準のテキストフィールドではなく、これらの選択肢を含む選択ボックスになります。
各タプルの最初の要素はモデルに設定される実際の値であり、2番目の要素は人間が読める名前です。 例えば:
YEAR_IN_SCHOOL_CHOICES = [
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
]
一般に、モデルクラス内で選択肢を定義し、値ごとに適切な名前の定数を定義するのが最善です。
from django.db import models
class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
GRADUATE = 'GR'
YEAR_IN_SCHOOL_CHOICES = [
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
(GRADUATE, 'Graduate'),
]
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=FRESHMAN,
)
def is_upperclass(self):
return self.year_in_school in {self.JUNIOR, self.SENIOR}
モデルクラスの外部で選択肢リストを定義して参照することもできますが、モデルクラス内の各選択肢の選択肢と名前を定義すると、そのすべての情報がそれを使用するクラスに保持され、選択肢の参照に役立ちます(例: Student.SOPHOMORE
は、Student
モデルがインポートされている場所であればどこでも機能します。
利用可能な選択肢を、組織的な目的で使用できる名前付きグループに収集することもできます。
MEDIA_CHOICES = [
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
]
各タプルの最初の要素は、グループに適用する名前です。 2番目の要素は、2タプルの反復可能であり、各2タプルには、オプションの値と人間が読める形式の名前が含まれています。 グループ化されたオプションは、単一のリスト内でグループ化されていないオプションと組み合わせることができます(この例の'unknown'
オプションなど)。
choices が設定されているモデルフィールドごとに、Djangoはフィールドの現在の値の人間が読める名前を取得するメソッドを追加します。 データベースAPIドキュメントの get_FOO_display()を参照してください。
選択肢は任意のシーケンスオブジェクトである可能性があることに注意してください。必ずしもリストやタプルである必要はありません。 これにより、選択肢を動的に構築できます。 ただし、 choices を動的にハッキングしていることに気付いた場合は、 ForeignKey を使用して適切なデータベーステーブルを使用することをお勧めします。 choices は、変更がほとんどない静的データを対象としています。
ノート
choices
の順序が変更されるたびに、新しい移行が作成されます。
blank = False が default とともにフィールドに設定されていない限り、"---------"
を含むラベルが選択ボックスでレンダリングされます。 この動作をオーバーライドするには、None
を含むタプルをchoices
に追加します。 例えば (None, 'Your String For Display')
。 または、None
の代わりに空の文字列を使用することもできます。これは、 CharField のように意味があります。
列挙型
さらに、Djangoは、簡潔な方法で選択肢を定義するためにサブクラス化できる列挙型を提供します。
from django.utils.translation import gettext_lazy as _
class Student(models.Model):
class YearInSchool(models.TextChoices):
FRESHMAN = 'FR', _('Freshman')
SOPHOMORE = 'SO', _('Sophomore')
JUNIOR = 'JR', _('Junior')
SENIOR = 'SR', _('Senior')
GRADUATE = 'GR', _('Graduate')
year_in_school = models.CharField(
max_length=2,
choices=YearInSchool.choices,
default=YearInSchool.FRESHMAN,
)
def is_upperclass(self):
return self.year_in_school in {
self.YearInSchool.JUNIOR,
self.YearInSchool.SENIOR,
}
これらはPythonの標準ライブラリのenum
と同様に機能しますが、いくつかの変更が加えられています。
- 列挙型メンバー値は、具象データ型を作成するときに使用する引数のタプルです。 Djangoは、人間が読める名前、つまり
label
として使用するために、このタプルの末尾に追加の文字列値を追加することをサポートしています。 label
は、遅延翻訳可能な文字列にすることができます。 したがって、ほとんどの場合、メンバー値は(value, label)
2タプルになります。 より複雑なデータ型を使用したサブクラス化の選択肢の例については、以下を参照してください。 タプルが指定されていない場合、または最後の項目が(遅延)文字列でない場合、label
はメンバー名から自動的に生成されます。
.label
プロパティが値に追加され、人間が読める名前を返します。
.choices
、.labels
、.values
、および.names
など、いくつかのカスタムプロパティが列挙クラスに追加され、それらのリストに簡単にアクセスできるようになります。列挙の別々の部分。 フィールド定義で choices に渡す適切な値として、.choices
を使用します。
enum.unique()
の使用は、値を複数回定義できないようにするために適用されます。 これは、フィールドの選択で予想される可能性は低いです。
YearInSchool.SENIOR
、YearInSchool['SENIOR']
、またはYearInSchool('SR')
を使用して列挙型メンバーにアクセスまたはルックアップすることは、.name
および.value
と同様に、期待どおりに機能することに注意してください。メンバーのプロパティ。
人間が読める名前を翻訳する必要がない場合は、メンバー名から推測することができます(アンダースコアをスペースに置き換え、タイトルケースを使用します)。
>>> class Vehicle(models.TextChoices):
... CAR = 'C'
... TRUCK = 'T'
... JET_SKI = 'J'
...
>>> Vehicle.JET_SKI.label
'Jet Ski'
列挙値が整数である必要がある場合は非常に一般的であるため、DjangoはIntegerChoices
クラスを提供します。 例えば:
class Card(models.Model):
class Suit(models.IntegerChoices):
DIAMOND = 1
SPADE = 2
HEART = 3
CLUB = 4
suit = models.IntegerField(choices=Suit.choices)
列挙型機能API を使用することもできますが、上記で強調表示されているようにラベルが自動的に生成されることに注意してください。
>>> MedalType = models.TextChoices('MedalType', 'GOLD SILVER BRONZE')
>>> MedalType.choices
[('GOLD', 'Gold'), ('SILVER', 'Silver'), ('BRONZE', 'Bronze')]
>>> Place = models.IntegerChoices('Place', 'FIRST SECOND THIRD')
>>> Place.choices
[(1, 'First'), (2, 'Second'), (3, 'Third')]
int
またはstr
以外の具象データ型のサポートが必要な場合は、Choices
と必要な具象データ型をサブクラス化できます。 date
DateField で使用:
class MoonLandings(datetime.date, models.Choices):
APOLLO_11 = 1969, 7, 20, 'Apollo 11 (Eagle)'
APOLLO_12 = 1969, 11, 19, 'Apollo 12 (Intrepid)'
APOLLO_14 = 1971, 2, 5, 'Apollo 14 (Antares)'
APOLLO_15 = 1971, 7, 30, 'Apollo 15 (Falcon)'
APOLLO_16 = 1972, 4, 21, 'Apollo 16 (Orion)'
APOLLO_17 = 1972, 12, 11, 'Apollo 17 (Challenger)'
注意すべき追加の注意事項がいくつかあります。
db_column
- Field.db_column
このフィールドに使用するデータベース列の名前。 これが指定されていない場合、Djangoはフィールドの名前を使用します。
データベースの列名がSQLの予約語である場合、またはPython変数名で許可されていない文字(特にハイフン)が含まれている場合は問題ありません。 Djangoは、舞台裏で列とテーブルの名前を引用しています。
db_index
- Field.db_index
True
の場合、このフィールドのデータベースインデックスが作成されます。
default
- Field.default
フィールドのデフォルト値。 これは、値または呼び出し可能オブジェクトにすることができます。 呼び出し可能であれば、新しいオブジェクトが作成されるたびに呼び出されます。
デフォルトは可変オブジェクト(モデルインスタンス、list
、set
など)にすることはできません。そのオブジェクトの同じインスタンスへの参照がすべてのデフォルト値として使用されるためです。新しいモデルインスタンス。 代わりに、必要なデフォルトを呼び出し可能ファイルでラップします。 たとえば、 JSONField にデフォルトのdict
を指定する場合は、次の関数を使用します。
def contact_default():
return {"email": "[email protected]"}
contact_info = JSONField("ContactInfo", default=contact_default)
lambda
は、移行によってシリアル化できないため、default
のようなフィールドオプションには使用できません。 その他の注意事項については、そのドキュメントを参照してください。
モデルインスタンスにマップする ForeignKey のようなフィールドの場合、デフォルトは、モデルインスタンスではなく、参照するフィールドの値( to_field が設定されていない場合はpk
)である必要があります。
デフォルト値は、新しいモデルインスタンスが作成され、フィールドに値が指定されていない場合に使用されます。 フィールドが主キーの場合、フィールドがNone
に設定されている場合もデフォルトが使用されます。
editable
- Field.editable
False
の場合、フィールドは管理者またはその他の ModelForm に表示されません。 モデルの検証の間もスキップされます。 デフォルトはTrue
です。
error_messages
- Field.error_messages
error_messages
引数を使用すると、フィールドで発生するデフォルトのメッセージを上書きできます。 オーバーライドするエラーメッセージに一致するキーを使用して辞書を渡します。
エラーメッセージキーには、null
、blank
、invalid
、invalid_choice
、unique
、unique_for_date
があります。 以下のフィールドタイプセクションでは、フィールドごとに追加のエラーメッセージキーが指定されています。
これらのエラーメッセージは、多くの場合、フォームに伝播されません。 モデルのerror_messages に関する考慮事項を参照してください。
help_text
- Field.help_text
フォームウィジェットで表示される追加の「ヘルプ」テキスト。 フィールドがフォームで使用されていない場合でも、ドキュメントに役立ちます。
この値は、自動生成された形式ではではなく HTMLエスケープされることに注意してください。 これにより、必要に応じて help_text にHTMLを含めることができます。 例えば:
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
または、プレーンテキストと django.utils.html.escape()を使用して、HTMLの特殊文字をエスケープすることもできます。 クロスサイトスクリプティング攻撃を回避するために、信頼できないユーザーから送信される可能性のあるヘルプテキストを必ずエスケープしてください。
primary_key
- Field.primary_key
True
の場合、このフィールドはモデルの主キーです。
モデルのどのフィールドにもprimary_key=True
を指定しない場合、Djangoは主キーを保持するフィールドを自動的に追加するため、どのフィールドにもprimary_key=True
を設定する必要はありません。デフォルトの主キーの動作をオーバーライドする場合を除きます。 自動作成される主キーフィールドのタイプは、 AppConfig.default_auto_field でアプリごとに指定するか、:setting: `DEFAULT_AUTO_FIELD` 設定でグローバルに指定できます。 詳細については、自動主キーフィールドを参照してください。
primary_key=True
は、 null = False および unique = True を意味します。 オブジェクトで許可される主キーは1つだけです。
主キーフィールドは読み取り専用です。 既存のオブジェクトの主キーの値を変更して保存すると、古いオブジェクトと一緒に新しいオブジェクトが作成されます。
バージョン3.2での変更:古いバージョンでは、自動作成された主キーフィールドは常に AutoField でした。
unique_for_month
- Field.unique_for_month
unique_for_date と同様ですが、フィールドは月に関して一意である必要があります。
verbose_name
- Field.verbose_name
フィールドの人間が読める名前。 詳細な名前が指定されていない場合、Djangoはフィールドの属性名を使用して自動的に作成し、アンダースコアをスペースに変換します。 詳細フィールド名を参照してください。
validators
- Field.validators
このフィールドに対して実行するバリデーターのリスト。 詳細については、バリデーターのドキュメントを参照してください。
ルックアップの登録とフェッチ
Field
は、ルックアップ登録API を実装します。 APIを使用して、フィールドクラスで使用できるルックアップ、およびフィールドからルックアップをフェッチする方法をカスタマイズできます。
フィールドタイプ
AutoField
- class AutoField(**options)
使用可能なIDに従って自動的にインクリメントする IntegerField 。 通常、これを直接使用する必要はありません。 特に指定しない場合、主キーフィールドはモデルに自動的に追加されます。 自動主キーフィールドを参照してください。
BigAutoField
- class BigAutoField(**options)
1
から9223372036854775807
までの数値に適合することが保証されていることを除いて、 AutoField によく似た64ビット整数。
BigIntegerField
- class BigIntegerField(**options)
[X101X] から9223372036854775807
までの数値に適合することが保証されていることを除いて、 IntegerField によく似た64ビット整数。 このフィールドのデフォルトのフォームウィジェットは NumberInput です。
BinaryField
- class BinaryField(max_length=None, **options)
生のバイナリデータを格納するフィールド。 bytes
、bytearray
、またはmemoryview
を割り当てることができます。
デフォルトでは、BinaryField
は編集可能をFalse
に設定します。この場合、 ModelForm に含めることはできません。
BinaryField
には、オプションの引数が1つ追加されています。
- BinaryField.max_length
- フィールドの最大長(文字数)。 最大長は、 MaxLengthValidator を使用したDjangoの検証で適用されます。
虐待BinaryField
データベースにファイルを保存することを考えるかもしれませんが、99 % o fの場合は設計が悪いと考えてください。 このフィールドは、適切な静的ファイル処理の代わりにではありません。
CharField
- class CharField(max_length=None, **options)
小さいサイズから大きいサイズの文字列用の文字列フィールド。
大量のテキストの場合は、 TextField を使用してください。
このフィールドのデフォルトのフォームウィジェットは TextInput です。
CharField には2つの追加の引数があります。
- CharField.max_length
必須。 フィールドの最大長(文字数)。 max_lengthは、データベースレベルで、 MaxLengthValidator を使用したDjangoの検証で適用されます。
ノート
複数のデータベースバックエンドに移植可能でなければならないアプリケーションを作成している場合、一部のバックエンドではmax_length
に制限があることに注意する必要があります。 詳細については、データベースバックエンドノートを参照してください。
- CharField.db_collation
-
オプション。 フィールドのデータベース照合名。
ノート
照合名は標準化されていません。 そのため、これは複数のデータベースバックエンド間で移植できません。
オラクル
Oracleは、MAX_STRING_SIZE
データベース初期化パラメータがEXTENDED
に設定されている場合にのみ照合をサポートします。
DateField
- class DateField(auto_now=False, auto_now_add=False, **options)
Pythonではdatetime.date
インスタンスで表される日付。 いくつかの追加のオプションの引数があります。
- DateField.auto_now
オブジェクトが保存されるたびに、フィールドが自動的に[今すぐ]に設定されます。 「最終変更」タイムスタンプに役立ちます。 現在の日付は常にが使用されていることに注意してください。 オーバーライドできるのはデフォルト値だけではありません。
このフィールドは、 Model.save()を呼び出したときにのみ自動的に更新されます。 QuerySet.update()などの他の方法で他のフィールドを更新する場合、フィールドは更新されませんが、そのような更新でフィールドのカスタム値を指定することはできます。
- DateField.auto_now_add
- オブジェクトが最初に作成されたときに、フィールドを自動的に[今]に設定します。 タイムスタンプの作成に役立ちます。 現在の日付は常にが使用されていることに注意してください。 オーバーライドできるのはデフォルト値だけではありません。 したがって、オブジェクトの作成時にこのフィールドに値を設定しても、無視されます。 このフィールドを変更できるようにする場合は、
auto_now_add=True
の代わりに次のように設定します。
このフィールドのデフォルトのフォームウィジェットは DateInput です。 管理者は、JavaScriptカレンダーと、「今日」のショートカットを追加します。 追加のinvalid_date
エラーメッセージキーが含まれています。
オプションauto_now_add
、auto_now
、およびdefault
は相互に排他的です。 これらのオプションを任意に組み合わせると、エラーが発生します。
ノート
現在実装されているように、auto_now
またはauto_now_add
をTrue
に設定すると、フィールドにeditable=False
およびblank=True
が設定されます。
ノート
auto_now
およびauto_now_add
オプションは、作成時または更新時に常にデフォルトのタイムゾーンの日付を使用します。 別のものが必要な場合は、auto_now
またはauto_now_add
を使用する代わりに、独自の呼び出し可能なデフォルトを使用するか、save()
をオーバーライドすることを検討してください。 または、DateField
の代わりにDateTimeField
を使用して、表示時間に日時から日付への変換を処理する方法を決定します。
DateTimeField
- class DateTimeField(auto_now=False, auto_now_add=False, **options)
Pythonではdatetime.datetime
インスタンスで表される日付と時刻。 DateField と同じ追加の引数を取ります。
このフィールドのデフォルトのフォームウィジェットは、単一の DateTimeInput です。 管理者は、JavaScriptショートカットを備えた2つの別々の TextInput ウィジェットを使用します。
DecimalField
- class DecimalField(max_digits=None, decimal_places=None, **options)
PythonではDecimal
インスタンスで表される固定精度の10進数。 DecimalValidator を使用して入力を検証します。
2つの必須引数があります。
- DecimalField.max_digits
- 数値で許可される最大桁数。 この数は
decimal_places
以上である必要があることに注意してください。
- DecimalField.decimal_places
- 数値とともに格納する小数点以下の桁数。
たとえば、小数点以下2桁の解像度で999
までの数値を格納するには、次を使用します。
models.DecimalField(..., max_digits=5, decimal_places=2)
また、小数点以下10桁の解像度で、最大約10億の数値を格納するには:
models.DecimalField(..., max_digits=19, decimal_places=10)
このフィールドのデフォルトのフォームウィジェットは、 localize がFalse
の場合は NumberInput 、それ以外の場合は TextInput です。
DurationField
- class DurationField(**options)
期間を保存するためのフィールド-Pythonでtimedelta
によってモデル化されています。 PostgreSQLで使用する場合、使用されるデータ型はinterval
であり、Oracleではデータ型はINTERVAL DAY(9) TO SECOND(6)
です。 それ以外の場合は、マイクロ秒のbigint
が使用されます。
ノート
DurationField
を使用した算術演算はほとんどの場合機能します。 ただし、PostgreSQL以外のすべてのデータベースでは、DurationField
の値をDateTimeField
インスタンスの算術演算と比較しても期待どおりに機能しません。
FileField
- class FileField(upload_to=None, max_length=100, **options)
ファイルアップロードフィールド。
ノート
primary_key
引数はサポートされておらず、使用するとエラーが発生します。
2つのオプションの引数があります。
- FileField.upload_to
この属性は、アップロードディレクトリとファイル名を設定する方法を提供し、2つの方法で設定できます。 どちらの場合も、値は Storage.save()メソッドに渡されます。
文字列値またはPath
を指定すると、strftime()
形式が含まれる場合があり、ファイルアップロードの日付/時刻に置き換えられます(アップロードされたファイルがいっぱいにならないようにするため)指定されたディレクトリ)。 例えば:
class MyModel(models.Model):
# file will be uploaded to MEDIA_ROOT/uploads
upload = models.FileField(upload_to='uploads/')
# or...
# file will be saved to MEDIA_ROOT/uploads/2015/01/30
upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
デフォルトの FileSystemStorage を使用している場合、文字列値が:setting: `MEDIA_ROOT` パスに追加され、アップロードされたファイルが保存されるローカルファイルシステム上の場所が形成されます。 別のストレージを使用している場合は、そのストレージのドキュメントをチェックして、upload_to
の処理方法を確認してください。
upload_to
は、関数などの呼び出し可能でもあります。 これは、ファイル名を含むアップロードパスを取得するために呼び出されます。 この呼び出し可能オブジェクトは、2つの引数を受け入れ、ストレージシステムに渡されるUnixスタイルのパス(スラッシュ付き)を返す必要があります。 2つの引数は次のとおりです。
口論
|
説明
|
instance
|
FileField が定義されているモデルのインスタンス。 より具体的には、これは現在のファイルが添付されている特定のインスタンスです。
ほとんどの場合、このオブジェクトはまだデータベースに保存されていないため、デフォルトのAutoField 、を使用する場合、主キーフィールドの値がまだない可能性があります。
|
filename
|
ファイルに最初に付けられたファイル名。 これは、最終的な宛先パスを決定するときに考慮される場合と考慮されない場合があります。
|
例えば:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)
- FileField.storage
ストレージオブジェクト、またはストレージオブジェクトを返すcallable。 これにより、ファイルの保存と取得が処理されます。 このオブジェクトを提供する方法の詳細については、ファイルの管理を参照してください。
バージョン3.1で変更:呼び出し可能オブジェクトを提供する機能が追加されました。
このフィールドのデフォルトのフォームウィジェットは ClearableFileInput です。
モデルで FileField または ImageField (以下を参照)を使用するには、いくつかの手順を実行します。
- 設定ファイルで、:setting: `MEDIA_ROOT` を、アップロードされたファイルをDjangoに保存するディレクトリへのフルパスとして定義する必要があります。 (パフォーマンスのために、これらのファイルはデータベースに保存されません。):setting: `MEDIA_URL` をそのディレクトリのベースパブリックURLとして定義します。 このディレクトリがWebサーバーのユーザーアカウントによって書き込み可能であることを確認してください。
- FileField または ImageField をモデルに追加し、 upload_to オプションを定義して、使用する:setting: `MEDIA_ROOT` のサブディレクトリを指定しますアップロードされたファイルの場合。
- データベースに保存されるのは、ファイルへのパスだけです(:setting: `MEDIA_ROOT` に対して)。 Djangoが提供する便利な url 属性を使用することをお勧めします。 たとえば、 ImageField の名前が
mug_shot
の場合、テンプレート:Object.mug shot.url
を使用してテンプレート内の画像への絶対パスを取得できます。
たとえば、:setting: `MEDIA_ROOT` が'/home/media'
に設定され、 upload_to が'photos/%Y/%m/%d'
に設定されているとします。 upload_to の'%Y/%m/%d'
部分は、strftime()
フォーマットです。 '%Y'
は4桁の年、'%m'
は2桁の月、'%d'
は2桁の日です。 1月にファイルをアップロードした場合。 2007年15日、ディレクトリ/home/media/photos/2007/01/15
に保存されます。
アップロードされたファイルのディスク上のファイル名またはファイルのサイズを取得する場合は、それぞれ name 属性と size 属性を使用できます。 使用可能な属性とメソッドの詳細については、ファイルクラスリファレンスおよびファイルの管理トピックガイドを参照してください。
ノート
ファイルはデータベースへのモデルの保存の一部として保存されるため、ディスクで使用される実際のファイル名は、モデルが保存されるまで信頼できません。
アップロードされたファイルの相対URLは、 url 属性を使用して取得できます。 内部的には、これは基礎となる Storage クラスの url()メソッドを呼び出します。
アップロードされたファイルを処理するときは常に、セキュリティホールを回避するために、アップロードする場所とファイルの種類に細心の注意を払う必要があることに注意してください。 アップロードされたすべてのファイルを検証して、ファイルが思いどおりのものであることを確認します。 たとえば、誰かが検証なしでWebサーバーのドキュメントルート内のディレクトリにファイルをやみくもにアップロードするようにした場合、誰かがCGIまたはPHPスクリプトをアップロードし、サイトのURLにアクセスしてそのスクリプトを実行する可能性があります。 それを許可しないでください。
また、アップロードされたHTMLファイルでさえ、(サーバーではなく)ブラウザーで実行できるため、XSSまたはCSRF攻撃と同等のセキュリティ脅威をもたらす可能性があることにも注意してください。
FileField インスタンスは、デフォルトの最大長100文字のvarchar
列としてデータベースに作成されます。 他のフィールドと同様に、 max_length 引数を使用して最大長を変更できます。
FileFieldおよびFieldFile
- class FieldFile
モデルの FileField にアクセスすると、基になるファイルにアクセスするためのプロキシとして FieldFile のインスタンスが提供されます。
FieldFile のAPIは、 File のAPIを反映していますが、重要な違いが1つあります。クラスによってラップされるオブジェクトは、必ずしもPythonの組み込みファイルオブジェクトのラッパーではありません。[X188X ]代わりに、 Storage.open()メソッドの結果のラッパーであり、 File オブジェクトであるか、カスタムストレージの[X367Xの実装である可能性があります。 ]ファイル API。
read()
やwrite()
などの File から継承されたAPIに加えて、 FieldFile には、基になるファイルとの対話に使用できるいくつかのメソッドが含まれています:
警告
このクラスの2つのメソッド、 save()と delete()は、デフォルトで、関連付けられたFieldFile
のモデルオブジェクトをデータベースに保存します。
- FieldFile.name
関連する FileField の Storage のルートからの相対パスを含むファイルの名前。
- FieldFile.path
基になる Storage クラスの path()メソッドを呼び出すことにより、ファイルのローカルファイルシステムパスにアクセスするための読み取り専用プロパティ。
- FieldFile.size
基になる Storage.size()メソッドの結果。
- FieldFile.url
基になる Storage クラスの url()メソッドを呼び出して、ファイルの相対URLにアクセスするための読み取り専用プロパティ。
- FieldFile.open(mode='rb')
指定されたmode
で、このインスタンスに関連付けられているファイルを開くか、再度開きます。 標準のPython open()
メソッドとは異なり、ファイル記述子を返しません。
基になるファイルは、アクセス時に暗黙的に開かれるため、基になるファイルへのポインタをリセットするか、mode
を変更する場合を除いて、このメソッドを呼び出す必要がない場合があります。
- FieldFile.close()
標準のPython file.close()
メソッドのように動作し、このインスタンスに関連付けられているファイルを閉じます。
- FieldFile.save(name, content, save=True)
このメソッドは、ファイル名とファイルの内容を受け取り、それらをフィールドのストレージクラスに渡し、保存されたファイルをモデルフィールドに関連付けます。 ファイルデータをモデル上の FileField インスタンスに手動で関連付ける場合は、save()
メソッドを使用してそのファイルデータを永続化します。
ファイルの名前であるname
と、ファイルの内容を含むオブジェクトであるcontent
の2つの必須引数を取ります。 オプションのsave
引数は、このフィールドに関連付けられたファイルが変更された後にモデルインスタンスを保存するかどうかを制御します。 デフォルトはTrue
です。
content
引数は、Pythonの組み込みファイルオブジェクトではなく、 django.core.files.File のインスタンスである必要があることに注意してください。 次のように、既存のPythonファイルオブジェクトから File を作成できます。
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)
または、次のようにPython文字列から作成できます。
from django.core.files.base import ContentFile
myfile = ContentFile("hello world")
詳細については、ファイルの管理を参照してください。
- FieldFile.delete(save=True)
このインスタンスに関連付けられているファイルを削除し、フィールドのすべての属性をクリアします。 注:このメソッドは、delete()
が呼び出されたときにファイルが開いている場合、ファイルを閉じます。
オプションのsave
引数は、このフィールドに関連付けられたファイルが削除された後にモデルインスタンスを保存するかどうかを制御します。 デフォルトはTrue
です。
モデルが削除されても、関連ファイルは削除されないことに注意してください。 孤立したファイルをクリーンアップする必要がある場合は、自分で処理する必要があります(たとえば、手動で実行したり、たとえばを介して定期的に実行するようにスケジュールしたりできるカスタム管理コマンドを使用して) cron)。
FilePathField
- class FilePathField(path=, match=None, recursive=False, allow_files=True, allow_folders=False, max_length=100, **options)
CharField の選択肢は、ファイルシステム上の特定のディレクトリ内のファイル名に限定されています。 いくつかの特別な引数があり、その最初のものは必須です。
- FilePathField.path
必須。 この FilePathField が選択を取得するディレクトリへの絶対ファイルシステムパス。 例:"/home/images"
。
path
は、実行時にパスを動的に設定する関数など、呼び出し可能にすることもできます。 例:
import os
from django.conf import settings
from django.db import models
def images_path():
return os.path.join(settings.LOCAL_FILE_DIR, 'images')
class MyModel(models.Model):
file = models.FilePathField(path=images_path)
- FilePathField.match
- オプション。 FilePathField がファイル名のフィルタリングに使用する文字列としての正規表現。 正規表現は、フルパスではなくベースファイル名に適用されることに注意してください。 例:
"foo.*\.txt$"
。これはfoo23.txt
というファイルと一致しますが、bar.txt
またはfoo23.png
とは一致しません。
- FilePathField.recursive
- オプション。
True
またはFalse
のいずれか。 デフォルトはFalse
です。 パスのすべてのサブディレクトリを含めるかどうかを指定します
- FilePathField.allow_files
- オプション。
True
またはFalse
のいずれか。 デフォルトはTrue
です。 指定した場所にあるファイルを含めるかどうかを指定します。 これまたは allow_folders はTrue
である必要があります。
- FilePathField.allow_folders
- オプション。
True
またはFalse
のいずれか。 デフォルトはFalse
です。 指定した場所のフォルダーを含めるかどうかを指定します。 これまたは allow_files はTrue
である必要があります。
潜在的な落とし穴の1つは、 match がフルパスではなく、ベースファイル名に適用されることです。 したがって、この例:
FilePathField(path="/home/images", match="foo.*", recursive=True)
… match はベースファイル名(foo.png
およびbar.png
)に適用されるため、/home/images/foo.png
と一致しますが、/home/images/foo/bar.png
とは一致しません。
FilePathField インスタンスは、デフォルトの最大長100文字のvarchar
列としてデータベースに作成されます。 他のフィールドと同様に、 max_length 引数を使用して最大長を変更できます。
FloatField
- class FloatField(**options)
Pythonでfloat
インスタンスによって表される浮動小数点数。
このフィールドのデフォルトのフォームウィジェットは、 localize がFalse
の場合は NumberInput 、それ以外の場合は TextInput です。
FloatField
対。 DecimalField
FloatField クラスが DecimalField クラスと混同されることがあります。 どちらも実数を表しますが、それらの数は異なります。 FloatField
はPythonのfloat
タイプを内部的に使用し、DecimalField
はPythonのDecimal
タイプを使用します。 2つの違いについては、decimal
モジュールに関するPythonのドキュメントを参照してください。
ImageField
- class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
FileField からすべての属性とメソッドを継承しますが、アップロードされたオブジェクトが有効な画像であることも検証します。
FileField で使用できる特別な属性に加えて、 ImageField にはheight
およびwidth
属性もあります。
これらの属性のクエリを容易にするために、 ImageField には2つの追加のオプション引数があります。
- ImageField.height_field
- モデルインスタンスが保存されるたびに画像の高さが自動入力されるモデルフィールドの名前。
- ImageField.width_field
- モデルインスタンスが保存されるたびに画像の幅が自動入力されるモデルフィールドの名前。
枕ライブラリが必要です。
ImageField インスタンスは、デフォルトの最大長100文字のvarchar
列としてデータベースに作成されます。 他のフィールドと同様に、 max_length 引数を使用して最大長を変更できます。
このフィールドのデフォルトのフォームウィジェットは ClearableFileInput です。
GenericIPAddressField
- class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)
文字列形式のIPv4またはIPv6アドレス(例: 192.0.2.30
または2a02:42fe::4
)。 このフィールドのデフォルトのフォームウィジェットは TextInput です。
IPv6アドレスの正規化は、 RFC 4291#section-2.2 セクション2.2に従います。これには、::ffff:192.0.2.0
などのセクションの段落3で提案されているIPv4形式の使用も含まれます。 たとえば、2001:0::0:01
は2001::1
に正規化され、::ffff:0a0a:0a0a
は::ffff:10.10.10.10
に正規化されます。 すべての文字は小文字に変換されます。
- GenericIPAddressField.protocol
- 有効な入力を指定されたプロトコルに制限します。 受け入れられる値は、
'both'
(デフォルト)、'IPv4'
、または'IPv6'
です。 マッチングでは大文字と小文字は区別されません。
- GenericIPAddressField.unpack_ipv4
::ffff:192.0.2.1
のようなIPv4マップアドレスを解凍します。 このオプションを有効にすると、そのアドレスは192.0.2.1
に解凍されます。 デフォルトは無効です。 protocol
が'both'
に設定されている場合にのみ使用できます。
空白値を許可する場合、空白値はnullとして格納されるため、null値を許可する必要があります。
JSONField
- class JSONField(encoder=None, decoder=None, **options)
JSONエンコードされたデータを格納するためのフィールド。 Pythonでは、データはPythonのネイティブ形式(辞書、リスト、文字列、数値、ブール値、None
)で表されます。
JSONField
は、MariaDB 10.2.7以降、MySQL 5.7.8以降、Oracle、PostgreSQL、およびSQLite( JSON1拡張機能が有効)でサポートされています。
- JSONField.encoder
標準のJSONシリアライザーでサポートされていないデータ型をシリアル化するためのオプションのjson.JSONEncoder
サブクラス(例: datetime.datetime
またはUUID
)。 たとえば、 DjangoJSONEncoder クラスを使用できます。
デフォルトはjson.JSONEncoder
です。
- JSONField.decoder
データベースから取得した値を逆シリアル化するためのオプションのjson.JSONDecoder
サブクラス。 値は、カスタムエンコーダーによって選択された形式(ほとんどの場合、文字列)になります。 デシリアライズでは、入力タイプを特定できないという事実を考慮する必要がある場合があります。 たとえば、実際にはdatetime
に選択されたのと同じ形式の文字列であるdatetime
を返すリスクがあります。
デフォルトはjson.JSONDecoder
です。
フィールドに default を指定する場合は、str
などの不変オブジェクト、またはdict
などの毎回新しい可変オブジェクトを返す呼び出し可能オブジェクトであることを確認してください。 ]または関数。 default={}
やdefault=[]
のような変更可能なデフォルトオブジェクトを提供すると、すべてのモデルインスタンス間で1つのオブジェクトが共有されます。
データベース内のJSONField
をクエリするには、 JSONField のクエリを参照してください。
PostgreSQLユーザー
PostgreSQLには、json
とjsonb
の2つのネイティブJSONベースのデータ型があります。 それらの主な違いは、保存方法とクエリ方法です。 PostgreSQLのjson
フィールドは、JSONの元の文字列表現として保存され、キーに基づいてクエリを実行するときにオンザフライでデコードする必要があります。 jsonb
フィールドは、インデックス作成を可能にするJSONの実際の構造に基づいて保存されます。 トレードオフは、jsonb
フィールドへの書き込みにかかるわずかな追加コストです。 JSONField
はjsonb
を使用します。
Oracleユーザー
Oracle Databaseは、JSONスカラー値の格納をサポートしていません。 JSONオブジェクトと配列(dict
とlist
を使用してPythonで表される)のみがサポートされます。
NullBooleanField
- class NullBooleanField(**options)
BooleanField とnull=True
のように。
バージョン3.1以降非推奨: NullBooleanField
は非推奨になり、BooleanField(null=True)
が優先されます。
PositiveBigIntegerField
- class PositiveBigIntegerField(**options)
PositiveIntegerField と同様ですが、特定の(データベースに依存する)ポイントの下の値のみを許可します。 0
から9223372036854775807
までの値は、Djangoでサポートされているすべてのデータベースで安全です。
PositiveIntegerField
- class PositiveIntegerField(**options)
IntegerField と同様ですが、正またはゼロ(0
)である必要があります。 0
から2147483647
までの値は、Djangoでサポートされているすべてのデータベースで安全です。 値0
は、下位互換性の理由から受け入れられます。
PositiveSmallIntegerField
- class PositiveSmallIntegerField(**options)
PositiveIntegerField と同様ですが、特定の(データベースに依存する)ポイントの下の値のみを許可します。 0
から32767
までの値は、Djangoでサポートされているすべてのデータベースで安全です。
SlugField
- class SlugField(max_length=50, **options)
Slug は新聞用語です。 スラッグは何かの短いラベルであり、文字、数字、アンダースコア、またはハイフンのみが含まれます。 それらは一般的にURLで使用されます。
CharFieldと同様に、 max_length を指定できます(そのセクションのデータベースの移植性と max_length に関する注記も読んでください)。 max_length が指定されていない場合、Djangoはデフォルトの長さ50を使用します。
Field.db_index をTrue
に設定することを意味します。
他の値の値に基づいてSlugFieldを自動的に事前入力すると便利なことがよくあります。 prepopulated_fields を使用して、管理者でこれを自動的に行うことができます。
検証には validate_slug または validate_unicode_slug を使用します。
- SlugField.allow_unicode
True
の場合、フィールドはASCII文字に加えてUnicode文字を受け入れます。 デフォルトはFalse
です。
SmallAutoField
- class SmallAutoField(**options)
AutoField と同様ですが、特定の(データベースに依存する)制限未満の値のみを許可します。 1
から32767
までの値は、Djangoでサポートされているすべてのデータベースで安全です。
SmallIntegerField
- class SmallIntegerField(**options)
IntegerField と同様ですが、特定の(データベースに依存する)ポイントの下の値のみを許可します。 -32768
から32767
までの値は、Djangoでサポートされているすべてのデータベースで安全です。
TextField
- class TextField(**options)
大きなテキストフィールド。 このフィールドのデフォルトのフォームウィジェットは Textarea です。
max_length
属性を指定すると、自動生成されたフォームフィールドの Textarea ウィジェットに反映されます。 ただし、モデルまたはデータベースレベルでは適用されません。 そのためには CharField を使用してください。
- TextField.db_collation
-
フィールドのデータベース照合名。
ノート
照合名は標準化されていません。 そのため、これは複数のデータベースバックエンド間で移植できません。
オラクル
Oracleは、TextField
の照合をサポートしていません。
TimeField
- class TimeField(auto_now=False, auto_now_add=False, **options)
Pythonではdatetime.time
インスタンスで表される時間。 DateField と同じ自動入力オプションを受け入れます。
このフィールドのデフォルトのフォームウィジェットは TimeInput です。 管理者はいくつかのJavaScriptショートカットを追加します。
UUIDField
- class UUIDField(**options)
普遍的に一意の識別子を格納するためのフィールド。 PythonのUUID
クラスを使用します。 PostgreSQLで使用する場合、これはuuid
データ型に格納されます。それ以外の場合は、char(32)
に格納されます。
ユニバーサル一意識別子は、 primary_key の AutoField の優れた代替手段です。 データベースはUUIDを生成しないため、 default を使用することをお勧めします。
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
UUID
のインスタンスではなく、呼び出し可能オブジェクト(括弧を省略)がdefault
に渡されることに注意してください。
PostgreSQLでのルックアップ
:lookup: `iexact` 、:lookup:` contains` 、:lookup: `icontains` 、:lookup:` startswith` [を使用X116X]、:lookup: `istartswith` 、:lookup:` endswith` 、または:lookup: `iendswith` PostgreSQLでのルックアップは機能しませんPostgreSQLはハイフン付きのuuidデータ型に値を格納するため、ハイフンなしの値。