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)












  • 相关阅读:
    461. Hamming Distance
    Myeclipse中WebServlet cannot be resolved to a type报错
    注解方式配置Servlet(Servlet3.0)
    Oracle连接池操作
    最短路径算法
    编写学生类Stu
    编写程序,统计某旅馆住宿客人的总数,要求输入客人姓名,输出客人编号(按先后顺序自动生成),姓名以及总人数。
    货物管理系统
    c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)
    shut
  • 原文地址:https://www.cnblogs.com/weigege2015/p/8717031.html
Copyright © 2011-2022 走看看