舉例講解Django中數(shù)據(jù)模型訪問(wèn)外鍵值的方法
先設(shè)置一個(gè)關(guān)于書(shū)本(book)的數(shù)據(jù)模型:
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
def __unicode__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.title
訪問(wèn)外鍵(Foreign Key)值
當(dāng)你獲取一個(gè)ForeignKey 字段時(shí),你會(huì)得到相關(guān)的數(shù)據(jù)模型對(duì)象。 例如:
>>> b = Book.objects.get(id=50) >>> b.publisher <Publisher: Apress Publishing> >>> b.publisher.website u'http://www.apress.com/'
對(duì)于用`` ForeignKey`` 來(lái)定義的關(guān)系來(lái)說(shuō),在關(guān)系的另一端也能反向的追溯回來(lái),只不過(guò)由于不對(duì)稱(chēng)性的關(guān)系而稍有不同。 通過(guò)一個(gè)`` publisher`` 對(duì)象,直接獲取 books ,用 publisher.book_set.all() ,如下:
>>> p = Publisher.objects.get(name='Apress Publishing') >>> p.book_set.all() [<Book: The Django Book>, <Book: Dive Into Python>, ...]
實(shí)際上,book_set 只是一個(gè) QuerySet,所以它可以像QuerySet一樣,能實(shí)現(xiàn)數(shù)據(jù)過(guò)濾和分切,例如:
>>> p = Publisher.objects.get(name='Apress Publishing') >>> p.book_set.filter(name__icontains='django') [<Book: The Django Book>, <Book: Pro Django>]
屬性名稱(chēng)book_set是由模型名稱(chēng)的小寫(xiě)(如book)加_set組成的。
相關(guān)文章
Python尾遞歸優(yōu)化實(shí)現(xiàn)代碼及原理詳解
這篇文章主要介紹了Python尾遞歸優(yōu)化實(shí)現(xiàn)代碼及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
tensorflow2.0教程之Keras快速入門(mén)
這篇文章主要介紹了tensorflow2.0教程之Keras快速入門(mén),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Python解決N階臺(tái)階走法問(wèn)題的方法分析
這篇文章主要介紹了Python解決N階臺(tái)階走法問(wèn)題的方法,簡(jiǎn)單描述了走臺(tái)階問(wèn)題,并結(jié)合實(shí)例形式分析了Python使用遞歸與遞推算法解決走臺(tái)階問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
關(guān)于pygame自定義窗口創(chuàng)建及相關(guān)操作指南
對(duì)于開(kāi)發(fā)一個(gè)游戲來(lái)說(shuō),窗口的顯示肯定是前提中的前提,對(duì)于pygame來(lái)說(shuō),只需要一小段代碼就可以初始化窗口,下面這篇文章主要給大家介紹了關(guān)于pygame自定義窗口創(chuàng)建及相關(guān)操作的相關(guān)資料,需要的朋友可以參考下2022-07-07
分享五個(gè)超實(shí)用Python腳本,減少垃圾軟件負(fù)擔(dān)
今天給大家?guī)?lái)幾個(gè)實(shí)用的python腳本工具,可以實(shí)現(xiàn)系統(tǒng)提示工具、文件夾清理工具等,這樣就再也不用擔(dān)心女朋友在電腦里安裝垃圾軟件啦2022-05-05
Python實(shí)現(xiàn)線性判別分析(LDA)的MATLAB方式
今天小編大家分享一篇Python實(shí)現(xiàn)線性判別分析(LDA)的MATLAB方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python常用模塊之threading和Thread模塊及線程通信
這篇文章主要介紹了Python常用模塊之threading和Thread模塊及線程通信,文章為圍繞主題的相關(guān)內(nèi)容展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友看可以參考一下方法2022-06-06
python html2text庫(kù)將HTML文檔轉(zhuǎn)換為純文本格式使用示例探索
這篇文章主要為大家介紹了python html2text庫(kù)將HTML文檔轉(zhuǎn)換為純文本格式使用示例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

