天天看點

django orm級聯_Django系列文章:(一)使用ORM新增、更新和删除記錄

(本系列文章參考資料為Django1.6官方的文檔)

Django為我們提供了許多CRUD的封裝,但是苦于IDE都沒有提供很好的智能提示,是以用起來還真的是稍微有點不爽。

首先是模型的定義,這裡就直接采用Django文檔裡面提供的模型做例子了(模型做了一點點的删減)

class Blog(models.Model):

name = models.CharField(max_length=100)

tagline = models.TextField()

class Author(models.Model):

name = models.CharField(max_length=50)

email = models.EmailField()

class Entry(models.Model):

blog = models.ForeignKey(Blog)

headline = models.CharField(max_length=255)

body_text = models.TextField()

pub_date = models.DateField()

mod_date = models.DateField()

authors = models.ManyToManyField(Author)

n_comments = models.IntegerField()

n_pingbacks = models.IntegerField()

rating = models.IntegerField()

建立記錄

單表建立記錄的方法倒是很簡單,

b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')

b.save()

當然,想少寫一行save的話,用Create方法就好了

b=Blog.objects.create(name='Beatles Blog')

用過Hibernate或者EntityFrame的話,這種新增的方式倒是挺熟悉的

同時插入主表和外鍵表的時候碰到一個有趣的問題,官方提供的插入示例是先把主表插進去,然後把主表的對象查詢出來,然後再把外鍵表的資訊插入進去。感覺這裡為什麼不同時把主外鍵表的資訊一起插入進去呢?這樣豈不是白白的浪費了一次查詢。。。。

entry = Entry()

entry.save()

entry = Entry.objects.get(pk=1)

cheese_blog = Blog()

entry.blog = cheese_blog

entry.save()

稍微做了一些實驗之後發現,可以采用如下的方法對主外鍵表進行同時更新,不用重新查詢一般

a=Blog.objects.create()

b=Entry.objects.create(blog=a)

對多對多關系的表進行操作的方式也是比較特别,要先把主表的對象儲存下來,然後把對象查出來,接着調用add的方法就可以了

joe = Author.objects.create(name="Joe")

entry.authors.add(joe)

同樣的,也可以在建立的時候同時關聯多表的對象

更新記錄

更新記錄的操作方式也和Hibernate差不多,把對象查出來,然後設定完相應的值之後save一下就好了,假如要更新的是外鍵的話,那麼把外鍵的屬性也指派一下就OK。

b5.name = 'New name'

b5.save()

删除記錄

把你希望删除的對象查詢出來,然後調用delete()方法就可以了。比較特别的是,當删除了主表的資訊,外鍵表的資訊會被級聯删除。而對于多對多關系的記錄來說,關系表的記錄會被級聯删除掉。是以設計模型的時候記得要花點心思了