关于django models中的关系操作一

关于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模型层一对一关系的一个简单的学习,代码为示例代码,有什么错误欢迎指正,我也在学习中

不懂的可以留言

---------------代码为部分代码----------------

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G0T9CX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券