您的位置:首页 > 数据库

Django 速成笔记(3)--Django models 数据库操作-增删改查-多对多关系以及一对多(外键)关系

2017-07-15 00:00 936 查看
摘要: Django 速成笔记(2)--Django models 数据库操作-增删改查-多对多关系以及一对多(外键)关系

models 文件中的配置

先看代码

# coding=utf-8
from django.db import models
# 文章分类页,与博客文章是多对多关系,一个博文可以属于多个分类,一个分类可以有多个博文
class Category(models.Model):
c_title = models.CharField(max_length=32, default='category')
def __str__(self):
return self.c_title

# 博客作者,与文章是一对多关系 ,一篇博文只有一个作者
class Author(models.Model):
name = models.CharField('作者昵称',max_length=32)
def __str__(self):
return self.name

# 文章
class Article(models.Model):
title = models.CharField(max_length=32, default='title')
createtime = models.DateTimeField(auto_now_add=True)
content = models.TextField(null=True)
#多对多主键,修改后数据库会生成对应的表。
category = models.ManyToManyField(Category, null=True, verbose_name='博客文章所属分类')
#一对一外键
author = models.ForeignKey(Author, null=True, verbose_name='博客文章作者')
def __str__(self):
return self.title

数据库图:



然后我们用Django shell测试

>>> python3 manage.py shell #启动shell
>>> from blog.models import Category, Author, Article  #导入models模块,如果没有提示错误就是正常导入了

>>> Author.objects.create(name='J_sky')
<Author: Author object>
>>> Category.objects.create(c_title='one')
<Category: one>
>>> Category.objects.create(c_title='two')
<Category: two>

#创建多对多数据的两种方法
>>> a2 = Article.objects.create(title='bbbbbb',content='mmmmmmmmm',author=au)
>>> a2.category.add(c1)

>>> a3 = Article(title='cccccc',content='iiiiiiiiii',author=au)
>>> a3.save()
>>> a3.category.add(c1)

#查询
>>> au.article_set.all()
<QuerySet [<Article: aaaaaa>, <Article: bbbbbb>, <Article: cccccc>]>
>>> c1.article_set.all()
<QuerySet [<Article: aaaaaa>, <Article: bbbbbb>, <Article: cccccc>]>

>>> a3.author
<Author: J_sky>
>>> a3.category.get()
<Category: one>

#删除多对多关联,并重新添加关联
a3.category.remove(c1)
a3.category.add(c2)

求赐教:是否有直接更新多对多表的操作方法?.update()这个方法看样是不灵了。

参考文献 :https://my.oschina.net/linktime/blog/105280

django文档-模型字段-关联字段
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: