關於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__ 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模型層一對一關係的一個簡單的學習,代碼爲示例代碼,有什麼錯誤歡迎指正,我也在學習中
       
       
不懂的可以留言
---------------代碼爲部分代碼----------------


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章