大数据 爬虫Python AI SqlSpbeen——Python技术栈《Django By Example》

Django——多对一关系

2019-08-24  本文已影响1人  布拉豆

Django的ORM中,有多种关系,例如多对一,一篇文章只能有一个作者,但是一个作者可以写多篇文章,这样就形成了多对一的关系。

1. 给项目添加多对一关联

先来给文章绑定一个作者的关联,多对一的关联字段是ForeignKey,这里的参数有绑定账户User,反向查询是通过related_name绑定一个write,代码如下:

class Article(models.Model):
   headline = models.CharField(null=True, blank=True, max_length=300)
   content = models.TextField(null=True, blank=True)
   auth = models.ForeignKey(to=User, related_name="write", null=True,blank=True,default=None)
   def __str__(self):
       return self.headline

在ForeignKey的参数中,另外几个参数:null=True表示允许为空,blank表示允许是不填,default参数设置默认为空

这个default参数比较重要,一旦数据库中有数据,然后给表格添加字段,这样就必须给原有数据的新字段加一个默认值。如果不加default,命令行中会提示选择。

下图是新加字段正常通过:

image

通过admin界面查看Article,会出现一个单选的下拉框,如下(文章只有一个作者,但是一个作者可以被多篇文章选择):

image

2. 通过多对一关系查询和反查询

用多篇文章关联admin这个用户之后,然后通过查询查看关联结果,以及正向查询和反向查询。

首先是正向查询,也就是通过文章查作者(关联是文章关联作者),第一步是先获取一个文章的对象,然后是打印article.auth这个属性值,代码如下:

# 从文章整体中,获取出第一个文章
article = Article.objects.all().first()
# 打印文章的auth属性的值
article.auth

反向查询,既是通过用户的对象,查询看他是否有文章,代码如下:

# 获取用户列表中的第一个用户
user = User.objects.all().first()
# 查询他写的所有文章
articles = user.write.all()
# 这里的write是设置关联是related_name值

就当前项目来测试操作,如图(shell界面操作):

image

首发于《Crossin的编程教室》


以上就是本篇文章的全部介绍内容了


!放在最后

如果文章中有什么错误或者建议修改的地方,欢迎留言纠正和回复

如果你喜欢本篇文章,不妨关注一下我们的公众号,每周更新两篇原创技术文档,都是干货

image
上一篇下一篇

猜你喜欢

热点阅读