天天看點

django model的get和filter方法的差別

django的get和filter方法是django model常用到的,搞清楚兩者的差別非常重要。

為了說明它們兩者的差別定義2個models

class Student(models.Model):
name = models.CharField('姓名', max_length=20, default='')
age = models.CharField('年齡', max_length=20, default='')


class Book(models.Model):
student = models.ForeignKey(Student)
           

一.先說下django的get方法:

1django的get方法是從資料庫的取得一個比對的結果,傳回一個對象,如果記錄不存在的話,它會報錯。

比如我資料庫裡有一條記錄,記錄的name的值是老王python的話,我用student = Student.objects.get(name=’老王python’),

傳回的是一個記錄對象,你可以通過student . _ _ dict _ _來檢視,它傳回的是一個字典的形式,{’key’:valeus},key是字段的名稱,而values是值的内容。

而如果我用get方法來查詢一個資料庫裡不存在的記錄,程式會報錯。

比如:s

tudent = Student.objects.get(name='老王')

,你自己可以運作看下。

2如果你用django的get去取得關聯表的資料的話,而關鍵表的資料如果多于2條的話也會報錯。

比如我的student表裡有一個記錄:

d name age
 python 

book表:

id student_id
 
  
           

我用

student = Student.objects.get(name='python')
book = Book.objects.get(student)
           

它也會報錯,因為book表有2條記錄和student表相比對。

二.再說下django filter:

1django的filter方法是從資料庫的取得比對的結果,傳回一個對象清單,如果記錄不存在的話,它會傳回[]。

比如我資料庫裡有一條記錄,記錄的name的值是老王python的話,我用

student = Student.objects.filter(name='老王python')

它傳回的student是一個對象的清單,可以看的出來student[0]和上面的get方式傳回的student的結果是一樣的。

2如果你用django的get去取得關聯表的資料的話,無論關聯表有多少記錄的都不會報錯。

django 除了model比較強大的話,表單和模闆也很強大.

另外我從别的資料裡看到filter好像有緩存資料的功能,第一次查詢資料庫并生成緩存,下次再調用filter方法的話,直接取得緩存的資料,會get方法每次執行都是直接查詢資料庫的,不知道這個是不是正确。

這是我用了一段時間django的一點心得體會,希望對大家了解django get和filter有幫助!