ジャンゴフォームとフォームデータの種類や属性を作成

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')]

おすすめ

転載: www.cnblogs.com/pythonywy/p/11360274.html