zoukankan      html  css  js  c++  java
  • django ORM之manytomany跨表

    共三张表:文章表,文章与文章类别关系表,文章类别表,文章表中有manytomany字段

    1.models.py

    class Article(models.Model):
        nid = models.BigAutoField(primary_key=True)
        title = models.CharField(verbose_name='文章标题', max_length=128)
        summary = models.CharField(verbose_name='文章简介', max_length=255)
        tags = models.ManyToManyField(
            to="Tag",
            through='Article2Tag',
            through_fields=('article', 'tag'),
        )
    class Article2Tag(models.Model):
        article = models.ForeignKey(verbose_name='文章', to="Article", to_field='nid', on_delete=models.CASCADE)
        tag = models.ForeignKey(verbose_name='标签', to="Tag", to_field='nid', on_delete=models.CASCADE)
    
        class Meta:
            unique_together = [
                ('article', 'tag'),
            ]
    class Tag(models.Model):
        nid = models.AutoField(primary_key=True)
        title = models.CharField(verbose_name='标签名称', max_length=32)
        blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid',on_delete=models.CASCADE)

    2.跨表

    (1)正向跨表:

    需求:点击文章分类,查看某一分类下的文章,如图,标签下的 查看“ python开发之路”这一类别下的文章



    obj = models.Article.objects.filter(blog__site=username)      # obj为这个人的博客园里的所有文章集合 jqueryset
    tag_articles = obj.filter(tags__nid=tag.nid)   # 多对多跨表,正向跨表,从文章表跨到标签表,利用article表中的manytomany字段tags,nid为tag表里面的nid,双下划线指向另一个表


    (2)反向跨表:

    需求:已知文章的nid,获取文章的标签名

    filter反向跨表格式:(要跨的指向的表)小写的表名__列名

    m = models.Tag.objects.filter(article__nid=13).first()        # 对tag表来说,指向article表是反向跨表,小写的表名__列名即article__nid  来求tag名
    print( m.title)












  • 相关阅读:
    php单引号和双引号
    转CSS技巧大全
    在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用) (转)
    从安装到使用Ubuntu遇到问题解决问题一览
    原型模型
    PHP源代码分析 tick(s)
    在DOS下修改windows 登入密码 转载
    配置php5.3.6+Apache2.2
    Java多线程全源码分析
    本笨鸟今天开始学习.net,有木有一起开始学的
  • 原文地址:https://www.cnblogs.com/weigege2015/p/8717031.html
Copyright © 2011-2022 走看看