關於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__ import unicode_literals
from django.db import models
# Create your models here.
# 一對一關係:數據庫中兩個表中數據的對應關係
# 一個賬戶對應着一個聯繫人,而一個聯繫人有一個賬戶
# 一對一關係是通過在兩個表之間定義相同的主鍵來完成
class Account(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'註冊時間')
class Meta: db_table = 'Account'
# 該函數是負責展示該類對象的詳細信息的函數,根據需要自定義展示的內容
def __unicode__(self):
return 'Account:%s'%self.username
class Contact(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)
class Meta: 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()
print a1.contact
# 正向查詢,通過賬戶查詢該賬戶對應的詳細信息
print c1.account
# 反向查詢,通過詳細信息查詢信息對應的賬戶
# a1.contact.mobile
# a1.contact.address
# a1.contact.code
# c1.account.username# c1.account.password
# 刪除賬戶,對應的聯繫人信息也會被刪除
# a1.delete()
1、兩個模型的關係通過Contact模型中的account字段進行定義
2、OneToOneField()的第一個參數定義被關聯的模型名
以上是對django模型層一對一關係的一個簡單的學習,代碼爲示例代碼,有什麼錯誤歡迎指正,我也在學習中
不懂的可以留言
---------------代碼爲部分代碼----------------