首页 > 其他 > 详细

django-表关系之一对多

时间:2019-11-19 21:34:13      阅读:96      评论:0      收藏:0      [点我收藏+]

在modele.py中,创建两个orm模型

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    #使用ForeignKey创建外键
    #models.CASCADE -> 当Category表中的某个数据被删除,那么Article表中的对应的数据也会删除(级联删除)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)

    #null=True -> 这个值为空的是因为之前已经插入过数据,为空的话可以不用强制插入数据
    author = models.ForeignKey(frontuser.FrontUser,on_delete=models.CASCADE,null=True)

使用下面这两条命令映射这两个ORM模型到数据库

python manage.py makemigrations

python manage.py migrate

-----------------------------------

在views.py中关联,并且通过这个关联并且查询数据

from .models import Category,Article
from django.http import HttpResponse

def one_to_many_view(request):
    """1.一对多的关联操作
    article = Article(title=‘钢铁是怎样炼成的‘,content=‘abc‘)
    category = Category.objects.first()     #获得数据库中Category该表下的数据
    author = FrontUser.objects.first()      #获得数据库中FrontUser该表下的数据

    article.category = category     #关联起来  这个 article是多   category 是 一
    article.author = author         # 同上关联起来

    article.save()      #保存

    return HttpResponse(‘关联success‘)
    """
    # 2.获取某个分类下的文章
    category = Category.objects.first()
    print(category.name)
    #获取articl下的第一条文章数据
    # article = category.article_set.first()  #因为关联上了,就可以从category表下通过article_set找到article表下的第一条数据
    # print(article)

    #获取article下的所有的文章数据
    articles = category.article_set.all()
    for article in articles:
        print(article)
    return HttpResponse(查询成功!)

 

更改django查询的默认方法:

这个  article_set  是django内置的查询数据的方法,也就是你的 表名称_set 形成的

我们可以更改这个方法

在models.py中

外键增加一个 related_name=‘articles‘  ,这个articles就是你命名的方法名字,注意:article_set这个方法就不存在了

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    #使用ForeignKey创建外键
    #models.CASCADE -> 当Category表中的某个数据被删除,那么Article表中的对应的数据也会删除(级联删除)
    category = models.ForeignKey(Category,on_delete=models.CASCADE,related_name=articles)

在views.py中使用这个方法即可:  也就是将article_set 名称改为了  articles

def one_to_many_view(request):
    articles = category.articles.all()
    for article in articles:
        print(article)
    return HttpResponse(查询成功!)

 

 往表中添加数据并且保存的方法:

在views.py中

def one_to_many_view(request):
    article = Article(title=aaa,content=AAA)
    category.article_set.add(article,bulk=False)    #bulk=False添加并且自动保存数据
    return HttpResponse(查询成功!)

#注意,前提是Article表下的其他外键字段是可以为空的,不然报错,也就是null=True

 

 

 

 

 

 

 

 

 

 

 

 

 

django-表关系之一对多

原文:https://www.cnblogs.com/ifdashui/p/11891876.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!