(本系列文章参考资料为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()方法就可以了。比较特别的是,当删除了主表的信息,外键表的信息会被级联删除。而对于多对多关系的记录来说,关系表的记录会被级联删除掉。所以设计模型的时候记得要花点心思了