1. 程式人生 > >Django 外來鍵操作

Django 外來鍵操作

django中,如果一個數據庫中的表之間有外來鍵的話可以方便的通過一個表查詢到其相關表的資料。如有下面三個model:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def
__unicode__(self):
return self.name class Entry(models.Model): blog = models.ForeignKey(Blog) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateTimeField() authors = models.ManyToManyField(Author) n_comments = models.IntegerField() n_pingbacks = models.IntegerField() rating = models.IntegerField() def
__unicode__(self):
return self.headline

可以使用__來查詢相關連的表裡的資料,如:

Entry.objects.filter(blog__name__exact=‘Beatles Blog‘)
Blog.objects.filter(entry__headline__contains=‘Lennon‘)

django中可以通過外來鍵類物件得到主鍵類的物件,因為一個外來鍵類的物件只能得到一個鍵類的物件,所以這個方法是可行的。如:e是一個Entry物件,則e.blog為e所對應的blog物件。即,e的blog屬性就是一個blog類物件。

django還有一種通過物件訪問相關聯表資料的方法,即用_set。但是這種方法只能是相關類訪問定義了關係的類(主鍵類訪問外來鍵類)。如:b.entry_set.all() #b是一個blog物件

另外還有就是如果Entry中blog屬性的定義如果改成這樣:blog = ForeignKey(Blog, related_name=‘entries‘)這樣的話就可以像下面這樣通過blog物件得到entry物件的一個集合:

 b = Blog.objects.get(id=1)
 b.entries.all() # Returns all Entry objects related to Blog.

 b.entries is a Manager that returns QuerySets.
 b.entries.filter(headline__contains=‘Lennon‘)
 b.entries.count()

django 的model裡面__還有一個方便的用法,如:Entry.objects.get(headline__exact="Man bites dog")。其中headline是一個屬性名,exact是一個lookup type,它規定了欄位查詢的一些規則,如部分匹配(like),忽略大小寫等等。更多的lookup type見:http://docs.djangoproject.com/en/dev/topics/db/queries/#topics-db-queries

如果有兩個一個model中有兩個外來鍵同時對應於同一個model,那麼要指定related_name,這個名字是主鍵model來呼叫外來鍵model是代表“外來鍵model名_set”的。如:

from django.db import models
from django.contrib.auth.models import User

class Relation(models.Model):
    follower = models.ForeignKey(User, related_name=‘follower‘)
    followed = models.ForeignKey(User, related_name=‘followed‘)

reobjs = followed.followed.filter(follower = follower)

相關推薦

Django 外來操作

django中,如果一個數據庫中的表之間有外來鍵的話可以方便的通過一個表查詢到其相關表的資料。如有下面三個model: class Blog(models.Model): name = models.CharField(max_length=100

Django外來(ForeignKey)操作以及related_name的作用

  之前已經寫過一篇關於Django外來鍵的文章,但是當時並沒有介紹如何根據外來鍵對資料的操作,也就是如何通過主表查詢子表或者通過子表查詢主表的資訊    首先我定義了兩個模型,一個是老師模型,一個是學生模型,一個老師對應多個學生,這個算是一個一對多的型別(如下圖所示)  

django 外來查詢 一對多 通過物件查詢和通過filter values 雙下劃線查詢

表結構: from django.db import models class Book(models.Model): name = models.CharField(max_length=32) price = models.IntegerField() pub_d

Django 外來ForeignKey中的on_delete

當你在Django中刪除了一個有著外來鍵關聯的資料時,比如一個作者和他名下的所有的書的資訊,書的外來鍵是作者(一個作者可有好多本書),當你把作者的資訊從資料庫中刪除時,Django提供了一下幾個引數來對作者的書的資料進行操作 外來鍵的定義: #models.pyclass Author(models.Mo

oracle 外來操作

– 建立 alter table 表名 add constraint 外來鍵名 foreign key(從表外來鍵欄位) references foreign_main(主表外來鍵欄位); – 查詢外

django 外來model的互相讀取

先設定一個關係模型如下: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextF

Django外來關係描述

注:本文需要你有一定的資料庫知識,本文的資料庫語法使用mysql書寫 Django中,跟外來鍵有關的關係有三種,下面來一一介紹。 OneToManyField 這種最好理解,說白了就是最普通的外來鍵,看看下面兩個模型: class GoodsType

sql server 中常用修改列 ,建立主外來操作

表結構 CREATE TABLE [staff] ( [id] [varchar](50) NOT NUL L, [name] [varchar](50) NOT NULL, [password] [varchar](50) NULL, [roleid] [varchar](50) NULL, [accoun

django中的數據庫外操作

.so 指向 oat 生成 price 外鍵 參數 rfi ice 以MYSQL為例: (1)在model中定義兩個數據表,食物信息和食物類別信息 class foodInfo(models.Model): food_id = models.AutoField(ma

MySQL資料庫中主外來操作

在MySQL資料庫中,一般會涉及到主鍵和外來鍵,在上一個表中添加了主鍵之後,通常在下一個表中要新增外來鍵,但是添加了外來鍵之後,在實體類和資料庫中在加上上一個表的主鍵會比較好,這樣兩個表關聯之後,在上一個表查詢完成之後,將查詢是出來的欄位拿著去下一個庫裡查詢,會比較好。 select * fro

Django外來使用詳解

在寫專案的過程中我們不可避免的會使用到外來鍵這個東西,那麼Django中是怎樣來使用外來鍵的呢? 瞭解外來鍵 在MySQL中,表有兩種引擎,一種是InnoDB,另外一種是myisam。如果使用的是InnoDB引擎,是支援外來鍵約束的。外來鍵的存在使得ORM框架在處理表關係的時候異常的

操作失敗: 無法更改關係,因為一個或多個外來屬性不可以為 null

  報錯:操作失敗: 無法更改關係,因為一個或多個外來鍵屬性不可以為 null  。 同時修改主表和從表的資料,想用EF主表T_ReviewPlan中某個物件item刪除item對應的從表T_ReviewSubject中的資料,結果報錯。 解決方法: db.從表.RemoveRang

欄位和欄位的引數,查詢的13個方法,但標的雙下劃線外來和多對多操作

                欄位  常用欄位  AutoField() 自增列,必須填入引數 primary_key=True則成為資料庫的主鍵。無該欄位時,django自動建立 一個model不能有兩個AutoField欄位。 IntegerField() 一個整數

mysql004--關聯查詢,外來的級聯操作,常用內建函式

ascii()   --返回字元的sacii碼 char()   --檢視ascii碼對應的字元值 concat(var1,var2,var3)  --字串拼接 length(str)   --返回字元長度 substring(str,start,len) --字串擷取 trim() ltrim()

django ModelForm中的外來欄位值過濾的實現

1. Model class user_list(models.Model): user_name=models.CharField(unique=True, max_length=40) full_name=models.CharField(unique=True, max_l

關於django 2.x版本中models.ForeignKey() 外來說明

下面是程式碼 class GroupInfos(models.Model): uid = models.AutoField(primary_key=True) caption = models.CharField(max_length=32, unique=True)

django專案培訓站-30-外來關聯正向與反向取值

模型類新增欄位時,要設為空 null = True, blank = True 表關聯的注意 課程表取課程機構表,在檢視中 c = course.objects.get('name'='abc','') corg=c.course_org 如果是課程機構表取課程內容

Navicat新增外來詳細操作

前言 用Navicat為mysql資料庫的兩個表之間建立外來鍵關係,出現“cannot add foreign key constraint”錯誤,操作了很久不知道怎麼回事,發現竟然是。。。。 正文 想要建立class表與student表之間的外來鍵連線,class為父

django admin編輯被外來關聯的主表時支援顯示字表記錄

假設有模型 class A(models.Model): name = models.CharField() class B(models.Model): name = models.CharField() a = models.ForeignK