关于django models中的关系操作一
GOOD LUCKY 2018
Django 模型层对三种关系模型(1:1,1:N,M:N)都有强大的支持
本次介绍三种关系模型中的一对一关系:
一对一模型
在sql语言中,一对一关系是通过在两个表之间定义相同的主键来完成。在Django模型层中,可以在任意一个模型中定义OneToOneField字段并定义相互之间的一对一关系
from django.db import models
代
码
展
示
# -*- coding: utf-8 -*-
from__future__importunicode_literals
fromdjango.dbimportmodels
# Create your models here.
#一对一关系:数据库中两个表中数据的对应关系
#一个账户对应着一个联系人,而一个联系人有一个账户
#一对一关系是通过在两个表之间定义相同的主键来完成
classAccount(models.Model): username = models.CharField(max_length=20,null=True,
blank=True,verbose_name=u'用户名') password = models.CharField(max_length=40,null=True,
blank=True,verbose_name=u'密码') register_date = models.DateField(auto_now_add=True,null=True,
blank=True,verbose_name=u'注册时间')
classMeta: db_table ='Account'
#该函数是负责展示该类对象的详细信息的函数,根据需要自定义展示的内容
def__unicode__(self):
return'Account:%s'%self.username
classContact(models.Model):
#在Contact中,关联Account表,让两个表的数据产生联系
#第一个参数:是被关联的模型名称
#第二个参数:当Account中的一条数据被删除的时候,与之对应的Contact数据也会被删除
account= models.OneToOneField(Account,on_delete=models.CASCADE,primary_key=True) address = models.CharField(max_length=100,null=True) code = models.CharField(max_length=20,null=True) mobile = models.CharField(max_length=20,null=True)
classMeta: db_table ='Contact'
def__unicode__(self):
# self.account:通过联系人对象反向查询该信息所属的人
return'Contact:%s-%s-%s'%(self.account.username,self.address,self.mobile)
#ORM:关系映射对象,把传统的SQL语句封装成了类和对象的形式,在操作表中的数据记录时,就像在操作类和对象
#一对一的正向查询和反向查询a1 = Account(username='dawei',password='333')a1.save()c1 = Contact(account=a1,address='xinmi',code='450000',mobile='13212344321')c1.save()
printa1.contact
#正向查询,通过账户查询该账户对应的详细信息
printc1.account
#反向查询,通过详细信息查询信息对应的账户
# a1.contact.mobile
# a1.contact.address
# a1.contact.code
# c1.account.username# c1.account.password
#删除账户,对应的联系人信息也会被删除
# a1.delete()
1、两个模型的关系通过Contact模型中的account字段进行定义
2、OneToOneField()的第一个参数定义被关联的模型名
以上是对django模型层一对一关系的一个简单的学习,代码为示例代码,有什么错误欢迎指正,我也在学习中
不懂的可以留言
---------------代码为部分代码----------------
领取专属 10元无门槛券
私享最新 技术干货