1. 程式人生 > >Django框架(十二:orm一對一的操作)

Django框架(十二:orm一對一的操作)

前面的部落格已經對資料庫的基礎知識有了介紹,對資料庫資料一對多的操作有了瞭解,現在來看看資料庫的一對一操作,非常簡單

資料庫中建立兩張表,一個賬戶表,一個使用者表。一個賬戶對應一個使用者,即一對一關係, ORM資料庫的一對一關係:一個表中的一條資料對應著另外一個表中的一條資料。 在建立表的時候需要介紹幾個引數:

from django.db import models
class Account(models.Model):
    a_name = models.CharField(max_length=20)
    # 賬戶密碼
    a_pwd = models.CharField(max_length=100)
    # 賬戶啟用的時間
    # DateField()引數為空,這個欄位的值需要自己新增。
    # auto_now=True: 當這個Account這個物件的屬性被修改了,在儲存的時候,這個a_register_date這個時間會自動更新為儲存時間;(強調更新時間)
    # auto_now_add=True: 含義就是這個時間欄位,不會隨著物件的修改而更新這個時間,只在這個物件被第一次建立的時候自動填充建立的時間。以後也不會再變動了。(強調建立時間)
    # auto_created=True: 表示使用當前時間作為值,自動建立這個欄位的值。預設是False。當建立物件的時候就不需要給這個欄位賦值了,會自動建立。
    a_register_date = models.DateTimeField(auto_now_add=True, auto_created=True)
    a_update_date = models.DateTimeField(auto_now=True)
    class Meta:
        db_table = 'account'

class Contact(models.Model):
    """
    一個賬戶的擁有人。
    """
    # 所有人的姓名
    c_name = models.CharField(max_length=20)
    # 所有人的住址
    c_address = models.TextField()
    # 所有人的聯絡方式
    c_phone = models.CharField(max_length=20)

    # 新增賬戶和所有人的一對一關係。
    # models.CASCADE:當account表中的一條資料刪除時,對應的contact表中的資料也要刪除。
    account = models.OneToOneField(Account, on_delete=models.CASCADE)

    class Meta:
        db_table = 'contact'

將models.OneToOneField寫在哪一個表中,哪一個表就是從表;OneToOneField()的第一個引數就是主表; OneToOneField不強調位置關係,兩個表中任選一個作為主表,另一個作為從表;

一對一的查詢

在這裡插入程式碼片
from django.shortcuts import render
from .models import Account, Contact
from datetime import datetime

def add(request):
    # 新增主表資料
    a1 = Account(a_name='[email protected]
', a_pwd='123', a_register_date=datetime.now(), a_update_date=datetime.now()) a1.save() a2 = Account(a_name='[email protected]', a_pwd='456', a_register_date=datetime.now(), a_update_date=datetime.now()) a2.save() # 新增從表資料 c1 = Contact(c_name='張三', c_address='北京', c_phone='111', account=a1) c1.save() c2 = Contact(c_name='李四', c_address='鄭州', c_phone='222', account_id=a2.id) c2.save() return render(request, 'index.html', {'result': '資料新增成功'}) def select(request): # 根據主表的一條資料,查詢從表的一條資料。也就是查詢該賬戶的擁有人。 account = Account.objects.get(id=2) contact = account.contact.c_name # 根據從表的一條資料,查詢主表的一條資料。也就是查詢這個人的賬戶。 contact = Contact.objects.get(id=2) account = contact.account.a_name return render(request, 'index.html', {'data': account}) def update(request): account = Account.objects.get(id=1) account.a_pwd = '111' account.save() return render(request, 'index.html', {'result': '資料修改成功'}) def delete(request): Account.objects.get(id=1).delete() return render(request, 'index.html', {'result': '資料刪除成功'})

一對一和一對多的關係圖展示 在這裡插入圖片描述