您好,登錄后才能下訂單哦!
一對一:
一對一的關系極為一個數據僅對應一個數據,用下圖的結構圖可以幫助理解:
下面用代碼實現一下,首先要創建工程項目如下:
接著,我們定義模型:
來到models.py
文件,創建兩個模型:
from django.db import models # Create your models here. class One(models.Model): oname = models.CharField(max_length=20,null=True) oage = models.CharField(max_length=20,null=True) odate = models.DateField(null=True) class Two(models.Model): # 設置一對一關系,是通過將表中的字段設置為主鍵完成的 # on_delete=models.CASCADE 當父表中的某一條數據刪除的時候 # 相關字表中的數據也會被刪除 tsub = models.OneToOneField(One,on_delete=models.CASCADE,primary_key=True) tfond = models.CharField(max_length=20,null=True) tdes = models.CharField(max_length=200,null=True)
來到myPro
文件夾下添加以下兩句代碼:
import pymysql pymysql.install_as_MySQLdb()
下面可以遷移文件:
python manage.py makemigrations python manage.py migrate
這樣我們就創建了兩個表:
來到views.py
文件中添加數據,代碼如下:
from django.shortcuts import render from .models import One,Two # Create your views here. def index(request): o1 = One.objects.create(oname='張三',oage=11,odate='2011-11-11') o2 = One.objects.create(oname='張三2',oage=12,odate='2012-12-12') t1 = Two.objects.create(tsub=o1,tfond='o1',tdes='我喜歡o1') t2 = Two.objects.create(tsub=o2,tfond='o2',tdes='我喜歡o2') return render(request,'index.html')
運行之后,將添加數據的代碼注釋掉,否則后面每運行一次都會添加。
下面,我們通過查詢數據來甄別其中的關系。
def select(request): t1 = Two.objects.get(tsub__oname = '張三') return render(request,'index.html',{'t1':t1})
一對多
即一個對象對應著對個對象。
創建模型代碼:
from django.db import models # Create your models here. class People(models.Model): name = models.CharField(max_length=50) card_num = models.IntegerField(default=0) class Card(models.Model): number = models.CharField(max_length=20) person = models.ForeignKey(People,on_delete=models.CASCADE) source = models.CharField(max_length=50)
urls.py
路由設置:
from django.contrib import admin from django.urls import path from myApp import views urlpatterns = [ path('admin/', admin.site.urls), path('add/',views.add), path('select/',views.select), ]
views.py
文件中代碼:
from django.shortcuts import render from .models import People,Card from django.http import HttpResponse # Create your views here. # 添加數據 def add(request): # p1 = People.objects.create(name='小王',card_num = 4) # p2 = People.objects.create(name='老王', card_num=40) # # c1 = Card(number='101',source = '中國銀行',person = p1) # c2 = Card(number='102', source='中國農行', person=p1) # c3 = Card(number='110', source='中國建行', person=p1) # c1.save() # c2.save() # c3.save() # # c4 = Card(number='201', source='河南鄭州美容美發', person=p2) # c5 = Card(number='202', source='鄭州交通一卡通', person=p2) # c6 = Card(number='203', source='鄭州逍遙鎮胡辣湯', person=p2) # c7 = Card(number='204', source='鄭州惠濟四附院', person=p2) # # c4.save() # c5.save() # c6.save() # c7.save() return HttpResponse('添加成功') def select(request): # 查找number=203的人 c1 = Card.objects.get(number='203') print(c1.person.name) # 查找id為3對應的人 c2 = Card.objects.get(id=3) print(c2.person.name) # 查找c2的所有卡 result = c2.person.card_set.all() print(result) for res in result: print(res.source) # 查找名字為老王的所有卡種 result = People.objects.get(name='老王') for card in result.card_set.all(): print(card.source) return HttpResponse('查詢成功')
多對多
即多個對象對應對個對象,類似公交車坐車,人可以坐多個公交車,公交車也可以載不同的人。
創建模型代碼如下:
from django.db import models # Create your models here. class Publication(models.Model): pname = models.CharField(max_length=200) paddress = models.CharField(max_length=200) class Book(models.Model): bname = models.CharField(max_length=200) bauthor = models.CharField(max_length=200) publication = models.ManyToManyField(Publication)
視圖文件views.py
文件代碼如下:
from django.shortcuts import render from .models import Publication,Book from django.http import HttpResponse # Create your views here. def add(request): # p1 = Publication(pname='大象出版社',paddress='河南',) # p2 = Publication(pname='北京出版社',paddress='北京') # p3 = Publication(pname='清華出版社',paddress='河北') # p1.save() # p2.save() # p3.save() # # b1 = Book(bname='海底兩萬里',bauthor='趙四') # b2 = Book(bname='遮天',bauthor='辰東') # b3 = Book(bname='童年', bauthor='xxxx') # b4 = Book(bname='在人間', bauthor='yyyy') # b5 = Book(bname='我的大學', bauthor='張飛') # b6 = Book(bname='湯姆索亞歷險記', bauthor='趙六兒') # b1.save() # b2.save() # b3.save() # b4.save() # b5.save() # b6.save() # # b1.publication.add(p1,p2,p3) # b2.publication.add(p1,p2) # b3.publication.add(p1,p3) # b4.publication.add(p2,p3) # b5.publication.add(p3) # 多對多關系,兩個表不直接產生聯系,而是將兩個表之間的關系記錄在中間表上 # 中間表不需要創建,會自動生成 return HttpResponse('添加成功') def select(request): # 通過書籍查找對應的出版社 b1 = Book.objects.get(bname='童年') # 獲取出版童年的所有出版社 b1_publication = b1.publication.all() for pub in b1_publication: print(pub.pname) print(pub.paddress) p1 = Publication.objects.get(pname = '清華出版社') all_book = p1.book_set.all() print('------------------') for book in all_book: print(book.bname) print(book.bauthor) return HttpResponse('查找成功')
這樣,就介紹完了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。