实战Django之Model操作之一对一外键(OneToOneField\ForeignKey)正反调用

目录篇:Django之model操作ORM目录篇 点击跳转
主篇:Django之Model操作之一对一外键正反调用【ORM篇四】点击跳转

目录

  •  OneToOneField方式
  •     建立表类
  •     根据类表进行django的shell命令行操作外键正反调用
  • Foreginkey+Unique=True方式
  •   建立表类
  •     根据类表进行django的shell命令行操作外键正反调用

 OneToOneField方式

    建立表类

跳转:实战之Django之Model建表流程 https://blog.csdn.net/Burgess_zheng/article/details/86564984

路径:project/modes_handle/models.py

from django.db import models

class A(models.Model):
    name = models.CharField(max_length=34)

class B(models.Model):
    name = models.CharField(max_length=34)
    a_key = models.OneToOneField("A", related_name='n', on_delete=models.CASCADE)
 

进入项目目录下执行以下面命令(创建表 or 重新生成表结构)
python manage.py makemigrations
python manage.py migrate

    根据类表进行django的shell命令行操作外键正反调用

进入项目目录(执行如下命令进行django提供的shell命令行)

F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py shell

>>> from modes_handle import models
>>> A_obj = models.A.objects.create(name='小红')
>>> B_obj = models.B.objects.create(name='小强',a_key_id=1)
>>> A_obj.name
'小红'
>>> B_obj.name
'小强'
>>> B_obj.a_key.name
'小红'
>>> A_obj.n.name
'小强'

 

插入:如果创建数据库表B表没有related_name该参数反向调取:(”B表名小写”)
A_obj.b.name  #得到结果:小强

Foreginkey+Unique=True方式

  建立表类

路径:project/modes_handle/models.py

from django.db import models

class A(models.Model):
    name = models.CharField(max_length=34)
class B(models.Model):
    name = models.CharField(max_length=34)
    a_key = models.ForeignKey("A",unique=True,related_name='n',on_delete=models.CASCADE)

进入项目目录下执行以下面命令(创建表 or 重新生成表结构)
python manage.py makemigrations
python manage.py migrate

    根据类表进行django的shell命令行操作外键正反调用

进入项目目录(执行如下命令进行django提供的shell命令行)

F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py shell

>>> from modes_handle import models
>>> A_obj = models.A.objects.create(name='小红')
>>> B_obj = models.B.objects.create(name='小强',a_key_id=1)
>>> A_obj.name
'小红'
>>> B_obj.name
'小强'
>>> B_obj.a_key.name
'小红'
>>> A_obj.n.all()[0].name
'小强'

插入:如果创建数据库表B表没有related_name该参数反向调取:(”B表名小写” + “_set”)
A_obj.b_set.all()[0].name #得到结果:小强

目录篇:Django之model操作ORM目录篇 点击跳转
主篇:Django之Model操作之一对一外键正反调用【ORM篇四】点击跳转​​​​​​​

你可能感兴趣的:(Django,Django之model实战篇,Django实战篇【总】)