1つのORMフィールド
オートフィールド
int型の自動インクリメント、PRIMARY_KEY = Trueのパラメータを入力しなければなりません。何の自動インクリメントが存在しない場合のモデルは、その後、自動的にID列と呼ばれる列を作成するとき。
IntegerFieldと
整数型、2147483647の範囲-2147483648インチ
CharFieldです
文字型、MAX_LENGTHパラメータ、MAX_LENGTHを示す文字を提供する必要があります。
DateFieldに
日付フィールド、日付形式YYYY-MM-DD、Pythonのdatetime.date()インスタンスに対応します。
DateTimeField型
時刻フィールド、フォーマットYYYY-MM-DD HH:MM [:SS [.uuuuuu] [TZ]、パイソンA datetime.datetimeの()の例に対応
そして、非常に一般的にフィールドで使用されます
2つのORMフィールドパラメータ
ヌル
空にすることができ、フィールドを表すために使用されます。
ユニーク
この表のユニーク= Trueのフィールドへのセットは一意である必要があります。
db_index
db_index場合= Trueの場合、インデックスフィールドは、この目的のために設定されている表します。
デフォルト
フィールドのデフォルト値を設定します。
DateFieldの和DateTimeField型
auto_now_add
現在の時刻をデータベースに追加されるときauto_now_add =真を設定すると、データレコードを作成します。
auto_now
設定auto_now = Trueの場合、データレコードを更新するたびに、フィールドを更新します。
3関係フィールド
外部キー
外部キーは、ORM内の外部キー関係のタイプを示すために使用され、フィールドの一般一つはForeignKeyの「多くは」の「複数」で提供しました。
ForeignKeyのは、同時にテーブルや他の関係を作ることができ、また、自分の関係を作ることができます。
に
関連していると、テーブルを設定します
フィールドに
テーブルの関連するフィールドを設定するには
related_name
逆の操作は、フィールド名はテーブル名_set「の代わりに、元の時に逆引き参照のために使用した場合。
例えば:
class Classes(models.Model):
name = models.CharField(max_length=32)
class Student(models.Model):
name = models.CharField(max_length=32)
theclass = models.ForeignKey(to="Classes")
我々は、すべての学生(逆引き参照)のクラスの関連付けを照会するとき、私たちは書くことができます。
models.Classes.objects.first().student_set.all()
我々はパラメータに追加すると、ForeignKeyのフィールドをrelated_name
class Student(models.Model):
name = models.CharField(max_length=32)
theclass = models.ForeignKey(to="Classes", related_name="students")
我々は、すべての学生(逆引き参照)のクラスの関連付けを照会するとき、私たちは書くことができます。
models.Classes.objects.first().students.all()
related_query_name
逆クエリ操作、テーブル名を置き換え接続接頭辞。
on_delete
あなたがテーブルを関連付けられているデータを削除すると、現在のテーブルの行の動作は、それに関連付けられています。
models.CASCADEは
また、削除されたことに関連した関連するデータを削除します
models.DO_NOTHINGは、
エラーの原因、関連するデータを削除IntegrityError
models.PROTECTの
関連エラーを引き起こし、削除データ、ProtectedError
models.SET_NULL
関連するデータを削除し、それに関連する値は、(前提FKフィールドが空になるように設定されるべきである)ヌルであります
models.SET_DEFAULT
デフォルト値に値セットに関連する関連するデータを、削除(FKの前提フィールドは、デフォルト値を設定する必要があります)
models.SET
関連するデータを削除し、
提供指定値に関連付けられた設定値:models.SET(値)
の戻り値が提供されるB値関連付けられた実行可能なオブジェクトセット:models.SETを(実行可能なオブジェクト)
def func():
return 10
class MyModel(models.Model):
user = models.ForeignKey(
to="User",
to_field="id",
on_delete=models.SET(func)
)
db_constraint
かどうかは、データベース内の外部キー制約を作成するには、デフォルトはTrueです。
OneToOneField
一つのフィールド。
通常、一つのフィールドには、既存のフィールドを拡張します。
場合クエリ周波数ギャップに異なるテーブル多目的フィールドで一つの関連付けは、この2つのテーブル2つのテーブルに配置され、テーブル内のオープンフィールドに格納され、その後、いずれかの確立され、大きすぎます協会。
class Author(models.Model):
name = models.CharField(max_length=32)
info = models.OneToOneField(to='AuthorInfo')
class AuthorInfo(models.Model):
phone = models.CharField(max_length=11)
email = models.EmailField()
に
関連していると、テーブルを設定します。
フィールドに
関連しているフィールドを設定します。
on_delete
ForeignKeyのフィールドを持ちます。
ManyToManyField
多くの関係の多くを表すために使用されます。第三テーブルを介して関係を確立するために、データベースに
に
関連していると、テーブルを設定します
related_name
ForeignKeyのフィールドを持ちます。
related_query_name
ForeignKeyのフィールドを持ちます。
対称の
自己多くの関連のためにのみ使用する場合は、逆の操作内でフィールドを作成するかどうかを指定します。デフォルトはTrueです。
例えば:
class Person(models.Model):
name = models.CharField(max_length=16)
friends = models.ManyToManyField("self")
この場合、人物オブジェクトはperson_setプロパティではありません。
class Person(models.Model):
name = models.CharField(max_length=16)
friends = models.ManyToManyField("self", symmetrical=False)
この場合、人物オブジェクトは現在の属性person_set逆引き参照を使用することができます。
スルー
使用のManyToManyFieldフィールドでは、Djangoは自動的に多くの関係に多くを管理するためのテーブルを生成します。
しかし、我々はまた、手動介して第3のテーブルでテーブル名を指定する必要があり、その後、多くの関係を管理する第三のテーブルを作成することができます。
through_fields
それに関連したセット場。
DB_Tableの
第三のテーブルはデフォルトでは、データベースのテーブルの名前で作成された場合。
3つの方法で4対多の関係
一つの方法:独自の第三のテーブルを作成します
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者姓名")
# 自己创建第三张表,分别通过外键关联书和作者
class Author2Book(models.Model):
author = models.ForeignKey(to="Author")
book = models.ForeignKey(to="Book")
class Meta:
unique_together = ("author", "book")
第二の方法:自動のManyToManyFieldで3番目のテーブルを作成します
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
# 通过ORM自带的ManyToManyField自动创建第三张表
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者姓名")
books = models.ManyToManyField(to="Book", related_name="authors")
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
# 自己创建第三张表,并通过ManyToManyField指定关联
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者姓名")
books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
# through_fields接受一个2元组('field1','field2'):
# 其中field1是定义ManyToManyField的模型外键的名(author),field2是关联目标模型(book)的外键名。
class Author2Book(models.Model):
author = models.ForeignKey(to="Author")
book = models.ForeignKey(to="Book")
class Meta:
unique_together = ("author", "book")
注意:
私たちは第三リレーショナル表に追加のフィールドを格納する必要があるときは、第三の方法を使用する必要があります。
しかし、我々は使用対多の関係に第三の道を作成するとき、あなたはセット、追加、削除、多くの関係を管理するための明確な方法、および第3のモデルテーブルを通じて多くの関係を管理する必要性を使用することはできません。
5元の情報
ORM対応するメタを別のクラスを含むクラス、およびクラスは、いくつかのメタ情報データベースをカプセル化します。次のように主なフィールドは、次のとおりです。
DB_Tableの
デフォルトでは、データベース内のORMのテーブル名がapp_クラス名、次のことができDB_Tableのテーブル名を上書きすることができます。
index_together
共同インデックス。
unique_together
UNITEDユニークなインデックス。
発注
どのようなデフォルトのソートフィールドを指定します。
のみ、このプロパティを設定し、我々のクエリの結果は)(逆のことができます。
6つのカスタムフィールド(理解)
カスタムchar型のフィールド:
class FixedCharField(models.Field):
"""
自定义的char类型的字段类
"""
def __init__(self, max_length, *args, **kwargs):
self.max_length = max_length
super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)
def db_type(self, connection):
"""
限定生成数据库表的字段类型为char,长度为max_length指定的值
"""
return 'char(%s)' % self.max_length
class Class(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=25)
# 使用自定义的char类型的字段
cname = FixedCharField(max_length=25)
ブログを参照してください:https://www.cnblogs.com/Dominic-Ji/p/9203990.html