zoukankan      html  css  js  c++  java
  • django_4数据库2——表外键

    表关系:

    • many to one
    • many to many
    • one to one

    many to one


    记录是如何创建出来的?      先创建one,在在创建many,创建时加入ForeignKey

    from django.db import models
    
    # Create your models here.
    class Enter(models):
        name = models.CharField(max_length=30)
        
        def __str__(self):
            return self.name
            
        __repr__ = __str__
        
    class Blog(models):
        name = models.CharField(max_length=30)
        entry = models.ForeignKey(Enter)      #参数为one项的类名
        
        def __str__(self):
            return self.name
            
        __repr__ = __str__   

    使用交互进行检索

    In [1]: from blog.models import Entry, Blog
    
    In [2]: entry1 = Entry.objects.create(name='alen')            #创建对应的one项(Entry)
    
    In [3]: entry2 = Entry.objects.create(name='max')
    
    In [4]: entry3 = Entry.objects.create(name='carl')
    
    In [6]: blog1 = Blog.objects.create(name='alen_blog1', entry=entry1)  #创建对应many项
    
    In [8]: blog1.entry          #(many)从many端进行检索到one
    Out[8]: alen
    
    In [9]: blog1.entry_id
    Out[9]: 1
    
    In [10]: entry1.blog_set        #(one)它所对应的blog(many)都有哪些
    Out[10]: <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager at 0x7f438ce2db00>
    
    In [11]: entry1.blog_set.all()
    Out[11]: <QuerySet [alen_blog1]>

    如何把这这种对应的结果关系如何在web界面实现?

    many to many

    class Author(models.Model):
        name = models.CharField(max_length=30)
    
        def __str__(self):
            return self.name
    
    class Book(models.Model):       #一个作者可以有多本书,一本书可以有多个作者 
        name = models.CharField(max_length=30)
        author = models.ManyToManyField(Author)
        def __str__(self):
            return self.name

    同步表,数据库中:

    show tables;
    | blog_book                  |
    | blog_book_author           |自动创建的两个表的关系表
    | blog_user                  |

    对数据进行管理

    [root@centos7 csvt04]# python3 manage.py shell

    In [2]: from blog.models import Author, Book
    
    In [3]: Author.objects.create(name='Alen')
    Out[3]: <Author: Alen>
    
    In [4]: Author.objects.create(name='Ben')
    Out[4]: <Author: Ben>
    
    In [5]: Author.objects.create(name='Carl')
    Out[5]: <Author: Carl>
    
    In [6]: Author.objects.create(name='Dev')
    Out[6]: <Author: Dev>
    
    In [7]: author = Author.objects.all()
    
    In [8]: author
    Out[8]: <QuerySet [<Author: Alen>, <Author: Ben>, <Author: Carl>, <Author: Dev>]>
    
    In [9]: b1 = Book()
    
    In [10]: b1.name = 'python book1'
    
    In [11]: b1.save()
    
    In [12]: alen = Author.objects.get(name='Alen')
    
    In [13]: alen
    Out[13]: <Author: Alen>
    
    In [14]: b1.author.add(alen)
    
    In [16]: b1.author.add(author[1])
    
    In [17]: b1.author.all()
    Out[17]: <QuerySet [<Author: Alen>, <Author: Ben>]>
    
    In [18]: b1.author.add(author[2])
    
    In [19]: b1.author.remove(alen)
    
    In [20]: b1.author.all()
    Out[20]: <QuerySet [<Author: Ben>, <Author: Carl>]>
    
    In [21]: b1.author.filter(name='Carl')
    Out[21]: <QuerySet [<Author: Carl>]>
    
    In [22]: b1.author.filter(name='Dev')
    Out[22]: <QuerySet []>
    
    In [23]: alen
    Out[23]: <Author: Alen>
    
    In [24]: alen.book_set.all()
    Out[24]: <QuerySet []>
    In [26]: alen.book_set.add(b1) In [27]: alen.book_set.all() Out[27]: <QuerySet [<Book: python book1>]> In [28]: alen.book_set.create(name='python boo2') Out[28]: <Book: python boo2> In [29]: alen.book_set.all() Out[29]: <QuerySet [<Book: python book1>, <Book: python boo2>]> In [30]: Book.objects.all() Out[30]: <QuerySet [<Book: python book1>, <Book: python boo2>]>
  • 相关阅读:
    常用第三方快递鸟单号查询Api接口免费对接调用攻略
    Solution -「CF 1477A」Nezzar and Board
    Solution -「THUPC 2021」区间矩阵乘法
    Solution Set -「CF 1520」
    Solution -「HNOI 2010」城市建设
    Solution -「NOI 2007」货币兑换
    Solution -「洛谷 P6156」简单题
    Solution -「YunoOI 2017」由乃的 OJ
    Journey -「CQOI 2021」
    Note -「SOS DP」高维前缀和
  • 原文地址:https://www.cnblogs.com/daduryi/p/6837796.html
Copyright © 2011-2022 走看看