Django数据库操作复习实例(一)
来源:互联网 发布:监控系统网络拓扑图 编辑:程序博客网 时间:2024/06/06 00:19
最近想复习一下与Django数据库有关的操作方法,于是便重新搭建了一个以博客为目的的Django服务,只是一个Demo演示,没有前端,数据通过Postman请求,以Json的形式返回,也没有考虑数据不存在等异常情况。
首先,Django的关联字段有OneToOneField,ForeignKey和ManyToManyField,分别对应一对一关系,多对一关系,和多对多关系,目前我们用到的是ForeignKey和ManyToManyField,这两个字段都是可以与自身做多对一,多对多关系的。在博客系统中,“好友”这个属性显然是一个对自身的多对多属性,其他的博客作者,评论对象,点赞对象都是明显的多对一属性。
在ForeignKey中有一个属性是related_name,通过这个属性,与它相关联的字段可以通过这个属性值找到这个字段。
#blog.models#encoding:utf-8from __future__ import unicode_literalsfrom django.db import modelsclass Author(models.Model): author_id = models.IntegerField(null=True) name = models.CharField(max_length=100) age = models.IntegerField() friends = models.ManyToManyField("self") #关联自身的多对多属相,朋友 def __str__(self): return self.name #获取作者详细信息 def getAuthorDetail(self): data = { 'author_id': self.author_id, 'name': self.name, 'age': self.age, } return dataclass Blog(models.Model): author = models.ForeignKey(Author,null=True,related_name="author") #将博文与作者关联起来 title = models.CharField(max_length=100) abstract = models.TextField() def __str__(self): return self.title #获取博文的信息 def getBlogDetail(self): data = { 'author': self.author.name, 'title': self.title, 'abstract': self.abstract, } return dataclass Comment(models.Model): author = models.ForeignKey(Author,null=True,related_name="comment_author") #评论关联作者 article = models.ForeignKey(Blog,null=True,related_name="article") #评论关联博文 content = models.TextField() def __str__(self): return self.content #获取评论详情 def get_comment_detail(self): data = { 'author': self.author.name, 'content':self.content, } return dataclass Likes(models.Model): blog = models.ForeignKey(Blog,null=True,related_name="blog") #点赞关联文章 author = models.ForeignKey(Author,null=True,related_name="likes_author") #点赞关联作者 amount = models.IntegerField(default=0) def __str__(self): return self.author #获取点赞详情 def get_likes_detail(self): data = { 'author': self.author.name, 'blog':self.blog.title, 'amount':self.amount, } return data在admin中加入相关字段,便于后台管理,本节直接在后台添加数据,暂不使用Post方法来添加数据。
遇到的一个小坑是在添加数据时后台管理对中文添加的不支持,加入一下三行就好了
import sys reload(sys) sys.setdefaultencoding('utf8')
#blog.admin from django.contrib import admin from django.contrib import admin from .models import Author, Blog, Comment, Likes import sys reload(sys) sys.setdefaultencoding('utf8') admin.site.register(Author) admin.site.register(Blog) admin.site.register(Comment)
以类似的方法添加blog,comment等。
#blog.views #encoding:utf-8 from django.http import JsonResponse from blog.models import * def get_friends(request): result = {'status': 200} friends_list = [] author_id = request.POST['id'] author = Author.objects.get(author_id=author_id ) friends = author.friends.all() for friend in friends: friends_list.append(friend.getAuthorDetail()) result['friends'] = friends_list return JsonResponse(result, status=200) def get_article(request): result = {'status': 200} articles_list = [] author_id = request.POST['id'] author = Author.objects.get(author_id=author_id) articles = author.author.all() #通过article的关联字段author找到author对应的文章 for article in articles: articles_list.append(article.getBlogDetail()) result['articles'] = articles_list return JsonResponse(result, status=200) def get_all_comment_of_author(request): result = {'status': 200} comment_list = [] author_id = request.POST['id'] author = Author.objects.get(author_id=author_id) articles = author.author.all() for article in articles: comments = article.article.all() #通过comment的关联字段article让article找到对应的评论 for comment in comments: comment_list.append(comment.get_comment_detail()) result["comments"] = comment_list return JsonResponse(result,status=200)
注意其中对ForeignKey和MantToManyKey的一些用法。
这样,开启Django服务,我们就能看到想要的结果:
接下来会考虑介绍详细的有关查询的操作和考虑博客访问权限的问题。
阅读全文
0 0
- Django数据库操作复习实例(一)
- 数据库复习(一)
- 数据库复习笔记(一)
- Django数据库操作(python)
- Django数据库操作(python)
- Django+mysql配置与简单操作数据库实例
- c#Socket通信(一)实例复习
- c#线程实例复习(一)
- Django学习笔记(四)Django使用操作数据库
- 数据库MySql的复习(一)
- 数据库的粗略复习(一)
- 数据库复习一
- 数据库复习一
- Django(三) ORM 数据库操作
- Django 模型(数据库)操作的要点
- Django数据库操作笔记
- DJANGO中操作数据库
- DJANGO数据库操作
- 埃及分数 (迭代加深入门)
- Class极品
- 03:成绩排序
- [LeetCode]--Merge k Sorted Lists
- rosbag数据记录及转换图片、视频
- Django数据库操作复习实例(一)
- C++regex
- tf.cast的使用
- 开源 java CMS
- mac 安装 python3
- Sql Server 指定列的乘积
- springboot test
- 俏丽的草丛之实习日志二
- Field 'id' doesn't have a default value