关于django models中的关系操作一

小咪咪 2022-05-22 12:52 260阅读 0赞

640_wx_fmt_png

关于django models中的关系操作一

GOOD LUCKY 2018

640_wx_fmt_gif

640_wx_fmt_png 1

Django 模型层对三种关系模型(1:1,1:N,M:N)都有强大的支持

  1. 本次介绍三种关系模型中的一对一关系:

640_wx_fmt_png 2

一对一模型

在sql语言中,一对一关系是通过在两个表之间定义相同的主键来完成。在Django模型层中,可以在任意一个模型中定义OneToOneField字段并定义相互之间的一对一关系

  1. from django.db import models

代码展示

  1. # -*- coding: utf-8 -*- from __future__ import unicode_literals
  2. from django.db import models
  3. # Create your models here. # 一对一关系:数据库中两个表中数据的对应关系 # 一个账户对应着一个联系人,而一个联系人有一个账户 # 一对一关系是通过在两个表之间定义相同的主键来完成 class Account(models.Model):
  4. username = models.CharField(max_length=20, null=True,
  5. blank=True, verbose_name=u'用户名')
  6. password = models.CharField(max_length=40, null=True,
  7. blank=True, verbose_name=u'密码')
  8. register_date = models.DateField(auto_now_add=True, null=True,
  9. blank=True, verbose_name=u'注册时间')
  10. class Meta:
  11. db_table = 'Account' # 该函数是负责展示该类对象的详细信息的函数,根据需要自定义展示的内容 def __unicode__(self):
  12. return 'Account:%s'%self.username
  13. class Contact(models.Model):
  14. # 在Contact中,关联Account表,让两个表的数据产生联系 # 第一个参数:是被关联的模型名称 # 第二个参数:当Account中的一条数据被删除的时候,与之对应的Contact数据也会被删除 account = models.OneToOneField(Account, on_delete=models.CASCADE, primary_key=True)
  15. address = models.CharField(max_length=100, null=True)
  16. code = models.CharField(max_length=20, null=True)
  17. mobile = models.CharField(max_length=20, null=True)
  18. class Meta:
  19. db_table = 'Contact' def __unicode__(self):
  20. # self.account:通过联系人对象反向查询该信息所属的人 return 'Contact:%s-%s-%s'%(self.account.username,self.address,self.mobile)
  21. #ORM:关系映射对象,把传统的SQL语句封装成了类和对象的形式,在操作表中的数据记录时,就像在操作类和对象 # 一对一的正向查询和反向查询a1 = Account(username='dawei',password='333')
  22. a1.save()
  23. c1 = Contact(account=a1,address='xinmi',code='450000',mobile='13212344321')
  24. c1.save()
  25. print a1.contact
  26. # 正向查询,通过账户查询该账户对应的详细信息 print c1.account
  27. # 反向查询,通过详细信息查询信息对应的账户 # a1.contact.mobile # a1.contact.address # a1.contact.code # c1.account.username# c1.account.password # 删除账户,对应的联系人信息也会被删除 # a1.delete()

  1. 1、两个模型的关系通过Contact模型中的account字段进行定义
  2. 2OneToOneField()的第一个参数定义被关联的模型名
  3. 以上是对django模型层一对一关系的一个简单的学习,代码为示例代码,有什么错误欢迎指正,我也在学习中
  4. 不懂的可以留言
  5. ---------------代码为部分代码----------------

640_wx_fmt_png 3

1802062559.jpg

发表评论

表情:
评论列表 (有 0 条评论,260人围观)

还没有评论,来说两句吧...

相关阅读

    相关 django model 多表操作

    一、创建模型   1,一对多关系   一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多’的一方,出版社是‘一’的一方,我

    相关 django_models_一对一关系

    [`OneToOneField`][OneToOneField]用来定义一对一关系。 和使用其它`Field`类型一样:在模型当中把它做为一个类属性包含进来。 当某个对象想扩

    相关 django_models_关系对多

    关系数据库   关系数据库的威力体现在表之间的相互关联。 Django 提供了三种最常见的数据库关系:多对一(many-to-one),多对多(many-to-many),一