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)
n_comments = models.IntegerField()
n_pingbacks = models.IntegerField()
rating = models.IntegerField()
def __str__(self):
return self.headline
创建对象
from blog.models import Blog
b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
b.save()
对已保存对象的更改
给定已保存到数据库的Blog实例b5,此实例更改其name,并更新它在数据库中的记录
b5.name = 'New name'
b5.save()
在明确调用之前,Django不会访问数据库save()
如何保存ForeignKey和ManyToManyField字段
更新ForeignKey字段的方式和保存普通字段的方式完全相同:将正确类型的对象分配给相关字段即可。假设适当的实例和 已保存到数据库(因此我们可以在下面检索它们):EntryentryEntryBlog
from blog.models import Blog, Entry
>>> entry = Entry.objects.get(pk=1)
>>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()
更新ManyToManyField工作的方式略有不同 - 使用 add()字段上的方法向关系添加记录。此示例将joe实例添加到Author对象:
from blog.models import Author
joe = Author.objects.create(name="Joe")
entry.authors.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)
如果尝试分配错误类型的对象,Django会报错
检索对象
要从数据库