django2.0 mysqlの次の一対のマルチ削除変更操作を実証する


この博文はdjango基礎操作に由来し、djangoの下orm対mysqlの一対の多関係モデルの基礎操作を実証することを目的としている.本実験を完了する前に,このブログの基礎構成を参照することができ,このブログを参照することができ,簡単で操作しやすい.djangoはゼロベースからsettingsを構成する.pyには次のものが含まれています.
  • django実行成功
  • リソースパス構成、リンクApp、コメントcsrfの操作
  • リソースパスは構成されず、mysqlデータベースへのリンクを追加できます.
    DATABASES = {
        'default': {
            'ENGINE':'django.db.backends.mysql', #     
            'NAME':'test', #          ,         
            'HOST':'127.0.0.1', #        
            'PORT':3306, #     
            'USER':'root', #    user
            'PASSWORD':'123456', #    password
        }
    }
    
    

    以下、本実験を開始する.
    じっけんステップ
  • modelsで2枚のテーブルをコードする作成
  • コマンドライン生成データベース、および移行ファイル
  • コマンドライン下でmysqlデータテーブルを操作し、添削を行います!

  • models.pyアカウントと連絡先テーブルの作成
    from django.db import models
    
    
    
    # Create your models here.
    class Account(models.Model):
        user_name = models.CharField(max_length=80)
        password = models.CharField(max_length= 255)
    
        def __str__(self):
            return "Account: %s"%self.user_name
    
    class Contact(models.Model):
        account = models.ForeignKey(
            Account,
            on_delete=models.CASCADE,
        )
        mobile = models.CharField(max_length=20)
    
        def __str__(self):
            return "%s, %s"%(self.account.user_name,self.mobile)
    
    
    
    

    データベース移行の生成
    soft Windows [   10.0.18362.145]
    (c) 2019 Microsoft Corporation。      。
    
    C:\Users\Administrator\Desktop\    \python_file\python  \    django\test02(     )>python manage.py makemigrations
    Migrations for 'app01':
      app01\migrations\0001_initial.py
        - Create model Account
        - Create model Contact
    
    C:\Users\Administrator\Desktop\    \python_file\python  \    django\test02(     )>python manage.py migrate
    Operations to perform:
      Apply all migrations: admin, app01, auth, contenttypes, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying admin.0003_logentry_add_action_flag_choices... OK
      Applying app01.0001_initial... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying auth.0009_alter_user_last_name_max_length... OK
      Applying auth.0010_alter_group_name_max_length... OK
      Applying auth.0011_update_proxy_permissions... OK
      Applying sessions.0001_initial... OK
    
    
    

    データベースのorm操作
    データテーブルのデータフィールドを2枚追加する操作
    In [1]: from app01 import models
    
    In [2]: a1 = models.Account.objects.create(user_name='Rose')
    
    In [3]: c1 = models.Contact.objects.create(account=a1,mobile='123456')
    
    In [4]: c1.save
    Out[4]: <bound method Model.save of <Contact: Rose, 123456>>
    
    In [5]: c1.save()
    
    In [6]: c2 = models.Contact.objects.create(account=a1,mobile='654321')
    
    In [7]: c2.save()
    
    In [8]: 
    
    

    クエリー関連データテーブルレコード(クエリーc 1,c 2の情報、フィルタ情報)
    In [8]: c1.account
    Out[8]: <Account: Account: Rose>
    
    In [9]: print(c1.account)
    Account: Rose
    
    In [10]: print(c2.account)
    Account: Rose
    
    In [11]: c3 = models.Contact.objects.filter(pk=1)
    
    In [12]: c3
    Out[12]: <QuerySet [<Contact: Rose, 123456>]>
    
    
    

    Contactデータテーブルレコードの変更(c 2のphoneを変更)
    
    In [13]: c2.mobile = '78910'
    
    In [14]: c2.save()
    
    In [15]: c2
    Out[15]: <Contact: Rose, 78910>
    
    In [16]: 
    
    

    Accountテーブルの関連レコードの削除(カスケード削除の有無を確認)
    In [16]: a1.delete()
    Out[16]: (3, {'app01.Contact': 2, 'app01.Account': 1})
    
    In [17]: a1.save()
    
    In [18]: models.Contact.objects.all()
    Out[18]: <QuerySet []>
    
    In [19]: