django之Model理解,ORM之一对多增删改查

一、创建用户和博文两张表

用户和博文是一对多的关系,外键在多的一方建立。

class Users(models.Model):
    account = models.CharField(max_length=30,null=False,unique=True)
    password = models.CharField(max_length=20,null=False)
    nickname = models.CharField(max_length=20,null=False,unique=True)
    headimg = models.CharField(max_length=100)
    gender = models.CharField(max_length=2)
    city = models.CharField(max_length=20)
    personsign = models.CharField(max_length=50)

class Article(models.Model):
    art_id = models.CharField(max_length=30,primary_key=True)
    title = models.CharField(max_length=30)
    publish = models.DateTimeField()
    content = models.TextField()
    author = models.ForeignKey('Users',on_delete=models.CASCADE)    #外键
python manege.py makemigrations     #在APP的migration文件下生成创建表的脚本,相当于shell,并没有和数据库打交道。
python manage.py migrate                  #连接数据库,执行sql语句,生成表格。

二、增加记录

方式一:外键_id=主表的主键
Article.objects.create(art_id=art_id,title=title,publish=publish,content=content,author_id=1)   
方式二:找到外键对应的主表的对象, 外键=主表的对象
Article.objects.create(art_id=art_id,title=title,publish=publish,content=content,author=authorobj)   

三、查询(通过对象)

1、正向查询: 查询title对应的作者的名字:

先拿到博文对象,博文对象点外键就是作者对象,拿到作者对象,就可以拿到作者属性。
artobj = Article.objects.filter(title = 'title')    #博文对象
userobj = artobj.author        #通过外键拿到作者对象
nickname = userobj.nickname        #拿任何作者属性

2、 反向查询:查询nickname写的博文的题目和时间

方式一:
先通过nickname拿到用户对象,再过滤查询
user_obj = Users.objects.get(nickname=nickname)[0]
art_list = Article.objects.filter(author = user_obj).values('title','publish')
print(res)
方式二:
先通过nickname拿到用户对象,再用户对象点博文表名_set.all()
user_obj = Users.objects.get(nickname=nickname)[0]
art_list = user_obj.article_set.all()

四、查询(通过双下划线)

核心:通过双下换线,链接到另一张表的字段

正向查询:查询title对应的作者的名字:
Users.objects.filter(article__title = '进程和线程的理解').values('nickname')
Article.objects.filter(title = '进程和线程的理解').values('author__nickname')
反向查询:查询nickname写的博文的题目和时间
art_list = Article.objects.filter(author__nickname = '石谦').values('title','publish')      #   外键__主表字段=‘ 值 ’
反向查询:查询性别男写的博文的题目和时间
art_list =  Article.objects.filter(author__gender='男').values('title', 'publish')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值