08.15自己概要
ジャンゴの異なる形式の間の関係の作成について
A.異なるとの間の関係を作成します。
1.マンツーマン
例えば
母表:userinfoを
ID | 名 | 年齢 |
---|---|---|
1 | ジョー・スミス | 12 |
2 | ジョン・ドウ | 58 |
Wordの表:プライベート
ID | 給料 | SP_ID |
---|---|---|
1 | 100 | 1 |
2 | 400 | 2 |
models.py
class UserInfo(models.Model):
name = models.CharField(max_length=32, null=True)
age = models.IntegerField(null=True)
class Private(models.Model):
salary = models.CharField(max_length=32, null=True)
sp = models.OneToOneField("UserInfo", null=True) #oneTooneField: 一对一, 默认要求该字段必须是唯一的 unique 外键关系
情報を挿入
models.UserInfo.objects.create(name='张三',age=12)
models.Private.objects.create(salary=100,sp_id=1)
お問い合わせ
#从母表查询子表中的数据
#方法1:res = models.UserInfo.objects.filter(name='张三').first().private.salary #子表表名小写.子表字段名
#方法2:res = models.UserInfo.objects.filter(name='张三').values('private__salary')
#从子表查询母表信息
#方法1:res = models.Private.objects.filter(salary='100').first().sp.name
#方法2:res = models.Private.objects.values('sp__name'):
2対多(表による)
models.py
class Boy(models.Model):
bname = models.CharField(max_length=30,null=True)
class Girl(models.Model):
gname = models.CharField(max_length=30,null=True)
class Boy2Girl(models.Model):
b = models.ForeignKey('Boy',null=True)
g = models.ForeignKey('Girl',null=True)
#联合唯一属性
class Meta:
unique_together=[
('b','g')
]
情報を挿入
import random
boys =[
models.Boy(bname='男1'),
models.Boy(bname='男2'),
models.Boy(bname='男3'),
models.Boy(bname='男4'),
models.Boy(bname='男5'),
models.Boy(bname='男6')
]
res = models.Boy.objects.bulk_create(boys)
girls =[
models.Girl(gname='女1'),
models.Girl(gname='女2'),
models.Girl(gname='女3'),
models.Girl(gname='女4'),
models.Girl(gname='女5'),
models.Girl(gname='女6'),
models.Girl(gname='女7'),
models.Girl(gname='女8'),
]
models.Girl.objects.bulk_create(girls)
a = [
models.Boy2Girl(b_id=random.randint(1,6),g_id=1),
models.Boy2Girl(b_id=random.randint(1,6),g_id=2),
models.Boy2Girl(b_id=random.randint(1,6),g_id=3),
models.Boy2Girl(b_id=random.randint(1,6),g_id=4),
models.Boy2Girl(b_id=random.randint(1,6),g_id=5),
models.Boy2Girl(b_id=random.randint(1,6),g_id=6),
models.Boy2Girl(b_id=random.randint(1,6),g_id=7),
models.Boy2Girl(b_id=random.randint(1,6),g_id=8),
]
models.Boy2Girl.objects.bulk_create(a)
お問い合わせ
#通过关系表查询,查boy位男1对于的女的信息
#方法1:res = models.Boy2Girl.objects.filter(b__bname='男1').values('g__gname')
#方法2:
res = models.Boy2Girl.objects.filter(b__bname='男1').all()
for a in res:
print(res.g.gname)
#通过boy表查女的信息
#方法1: res = models.Boy.objects.filter(bname='男1').values('boy2girl__g__gname')
#方法2:
res = models.Boy.objects.filter(bname='男1').all()
for a in res:
for b in a.boy2girl_set.all():
print(b.g.gname)
対多(不リレーショナルテーブルを介して)3。
models.py
class Boy1(models.Model):
bname = models.CharField(max_length=32, null=True)
g = models.ManyToManyField('Girl', null=True)
#他会生成一个boy1_g的表
class Girl1(models.Model):
gname = models.CharField(max_length=32, null=True)
情報を挿入
boys =[
models.Boy(bname='男1'),
models.Boy(bname='男2'),
models.Boy(bname='男3'),
models.Boy(bname='男4'),
models.Boy(bname='男5'),
models.Boy(bname='男6')
]
res = models.Boy1.objects.bulk_create(boys)
#
girls =[
models.Girl(gname='女1'),
models.Girl(gname='女2'),
models.Girl(gname='女3'),
models.Girl(gname='女4'),
models.Girl(gname='女5'),
models.Girl(gname='女6'),
models.Girl(gname='女7'),
models.Girl(gname='女8'),
]
models.Girl1.objects.bulk_create(girls)
両者の間に確立された関係
- 少年のオブジェクトを削除します
- Gは、オブジェクトを選択し、[追加
添加
|删除
|查询
ガールのid
追加(追加)
models.Boy1.objects.filter(bname='男1').first().g.add(1,2,3,4,5,2) #会自动去重保持唯一性也不会因为相同而报错
削除(削除)
models.Boy1.objects.filter(bname='男1').first().g.remove(1)
クエリ(すべて)
models.Boy1.objects.filter(bname='男1').first().g.all()
クリア(クリア)
models.Boy1.objects.filter(bname='男1').first().g.clear() #清除所有
注意点
自動的にディエンファシスがあるだろう場合は、時間を追加、彼は独特の共同効果が付属しています
4.多くの
https://www.cnblogs.com/pythonywy/p/11353202.htmlこちらをご覧ください
そして、2 .mysql djamgo-ORMデータ型の対応関係
データの種類 | mysqlの | djamgo、ヘビ |
---|---|---|
デジタル | TINYINT | 存在しません。 |
- | SMALLINT | SmallIntegerField(署名)PositiveSmallIntegerField(符号なし) |
- | MEDIUMINT | 存在しません。 |
- | int型(符号なし) | IntegerFieldと(署名)PositiveIntegerField(符号なし) |
- | BIGINT | BigIntegerField(署名)PositiveBigIntegerField(符号なし) |
- | 小数 | DecimalFieldは |
- | 浮く | FloatField |
- | ダブル | 存在しません。 |
弦 | CHAR | 存在しません。 |
- | VARCHAR | CharFieldです |
- | テキスト | テキストフィールド |
日時 | 日付 | DateFieldに |
- | 日付時刻 | DateTimeField型 |
- | タイムスタンプ | 存在しません。 |
そして、3 .mysql djamgo-ORMデータは、type属性に対応します
null 数据库中字段是否可以为空
db_column 数据库中字段的列名
default 数据库中字段的默认值
primary_key 数据库中字段是否为主键
db_index 数据库中字段是否可以建立索引
unique 数据库中字段是否可以建立唯一索引
class Meta:
### 联合唯一索引
unique_together=[
('b', 'g')
]
#### 联合索引
index_together = [
('b', 'g')
]
管理者にのみ利用可能です四の.djamgoデータタイプ
- EmailField(CharFieldです):
字符串类型
対応情報が検証されていないメール形式 - IPAddressField(フィールド):
字符串类型
、Djangoの管理とのModelForm検証機構IPV4を提供 - GenericIPAddressField(フィールド):
字符串类型
管理者のModelForm IPv4とIPv6、およびDjangoは検証を提供します- パラメータ:
- プロトコル:IPv4またはIPv6を指定し、 '両方'、 "IPv4の"、 "IPv6の"
- unpack_ipv4:trueと指定した場合、その後、入力として:: FFFF:192.0.2.1、192.0.2.1にオープンとげ機能を解決したときに、プロトコル=「両方」
- パラメータ:
- URLField(CharFieldです):
字符串类型
、Djangoの管理と検証URL提供のModelForm - (CharFieldですなど)SlugField:
字符串类型
、ジャンゴのModelFormで管理し、検証支援、文字、数字、アンダースコア、ハイフン(マイナス) - CommaSeparatedIntegerField(CharFieldです)
字符串类型
、デジタルフォーマットはコンマで区切られなければなりません - UUIDField(フィールド):
字符串类型
、とDjangoのModelForm管理がUUID形式の検証を提供 - FilePathFieldは(フィールド)になること:
字符串
、とDjangoのModelFormは、ファイルフォルダを読み取るための管理機能を提供します- パラメータ:
- パス:ファイルのパス
- 試合=なし:通常のマッチ
- 偽=再帰:以下のフォルダを再帰的に
- allow_files =真:ファイルを許可します
- allow_folders = FALSE:ファイルフォルダを許可します
- パラメータ:
- ImageField(FileFieldに):
字符串类型
データベースに保存されたパスは、指定されたディレクトリにファイルをアップロード- パラメータ:
- upload_to =「」:ファイルのアップロードパスを保存
- ストレージ=なし:ストレージ・コンポーネントは、デフォルトのdjango.core.files.storage.FileSystemStorage
- ImageField(FileFieldに):データベースのフィールド名は、高度に保存され、アップロード画像(文字列)
- height_field =なし:あなたの写真をアップロードするために、データベースのフィールド名の幅を節約する(文字列)
- パラメータ:
管理者にのみ利用可能なファイブ.djamgoプロパティ
verbose_name:管理者に表示されるフィールド名
空白:管理者ユーザーが空気に入ることを許可するかどうか
編集可能:かどうかを編集することができます管理
help_textに:メッセージフィールドで管理
選択肢:選択ボックスの管理の表示内容は、クロス表の操作を避けるために、メモリ内のデータを変更しません。
- 例えば:GF = models.IntegerField(選択肢= [(0、 'スイ・ヘ')、(1、 '大いとこ')]、デフォルト= 1)
error_messages:カスタムエラーメッセージ、あなたが表示されるエラーメッセージをカスタマイズしたい(辞書)。
- インポートRegexValidatorのdjango.core.validators
django.core.validatorsインポートザEmailValidator、URLValidator、DecimalValidator、MaxLengthValidator、MinLengthValidator、MaxValueValidator、MinValueValidatorから
例えば:
テスト= models.CharField(
MAX_LENGTH 32 =、
error_messages、= {
C1 '':「間違った優先順位。情報1 '
'C2 ':'優先順位のエラー情報2'、
'C3 ':'。優先順位のエラー情報3'、
}、
バリ= [
RegexValidator(REGEX =' root_の\のD + 'メッセージ='」間違った、コード= 'C1')、
RegexValidator(REGEX = 'root_112233 \ D +'、メッセージ= 'と間違っ'、コード= 'C2')、
EmailValidator(メッセージ= 'と間違っ'、コード= 'C3')]
)
- インポートRegexValidatorのdjango.core.validators