首先我们创建一个模型,之后可以在这个模型中进行创建、检索、更新和删除对象等。
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def __str__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField()
authors = models.ManyToManyField(Author)
number_of_comments = models.IntegerField()
number_of_pingbacks = models.IntegerField()
rating = models.IntegerField()
def __str__(self):
return self.headline
创建对象并进行保存更新操作
- 创建对象
要创建对象,应使用模型类的关键字将你在model.py文件里面创建的数据库表类进行实例化,然后调用save()
方法将其保存到数据库中。(save()方法详细使用方法:save())
🌰如下,假设model存在于mysite/blog/models.py中
from blog.models import Blog
b = Blog(name='Beatles Blog', tagline='All the latest Beatles news')
b.save()
Tips:
- 创建对象并保存时,数据库方面执行的是INSERT语句。
- 如果不显示调用save()方法,Django是不会访问数据库将数据进行保存的。
- save()方法没有返回值。
- 将更改保存至object
b5.name() = 'New name'
b5.save()
Tips:
- 更改时,数据库方面执行的是UPDATE语句
- 如果不显示调用save()方法,Django是不会访问数据库将数据进行保存的。
- 更新ForeignKey类型的object(多对一关系)
保存ForeignKey类型的工作原理和保存普通字段的工作原理是一样的,都是将正确类型的对象分配给相关字段。
🌰:更新blog的属性Entry,例如entry。(前提条件是数据库表Entry和Blog已经保存到数据库中)
from blog.models import Blog,Entry
# 获取Entry数据表中主键为1的数据
entry = Entry.object.get(pk=1)
# 获取Blog数据表中name=Cheddar Talk的数据
cheese_blog = Blog.objects.get(name="Cheddar Talk")
# 更新entry中blog的值为cheese_blog
entry.blog = cheese_blog
entry.save()
- 更新ManyToManyField类型的object (多对多关系)
更新ManyToManyField类型的工作方式有些许不同,需要使用add()
方法关系中添加记录(add()方法详细使用方法:add())
🌰:将Author实例添加到entry对象
from blog.models import Author
# 创建一个name=Joe的数据并将其保存至至Author数据表中,返回一个新创建的数据。
# 相当于先实例化数据库表类,再使用save()进行保存
joe = Author.objects.create(name="Joe")
# 将name=Joe数据添加至Entry数据表中
entry.author.add(joe)
如果想在ManyToManyField一次性添加多个记录,可以在add()
方法中添加多个参数,如下
john = Author.objects.create(name='John')
paul = Author.objects.create(name="Paul")
george = Author.objects.create(name="George")
ringo = Author.objects.create(name="Ringo")
entry.authors.add(john, paul, george, ringo)