• 外键的操作


    models.py

    class Publisher(models.Model):
        name = models.CharField(max_length=32)
    
    class Book(models.Model):
        title = models.CharField(max_length=32)
        publisher = models.ForeignKey('Publisher',on_delete=models.CASCADE)

    1、执行数据库迁移的命令

    2、在sql填入数据

    添加str方法:

    class Publisher(models.Model):
        name = models.CharField(max_length=32)
    
        def __str__(self):
            return '<Publisher: {} - {}>'.format(self.pk, self.name)
    
    class Book(models.Model):
        title = models.CharField(max_length=32)
        publisher = models.ForeignKey('Publisher',on_delete=models.CASCADE)
    
        def __str__(self):
            return '<Book: {} - {}>'.format(self.pk, self.title)
    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")
        import django
        django.setup()
    
        from app01 import models
    
        #正向  多---》一
        book_obj = models.Book.objects.get(pk=1)
        # print(book_obj) #<Book: 1 - 二狗的幸福一生>
        # print(book_obj.publisher)  #所关联的对象 #<Publisher: 1 - 二狗出版社>
        # print(book_obj.publisher_id) #1
    
        #反向 一---》多
        pub_obj = models.Publisher.objects.get(pk=1)
        # print(pub_obj) #<Publisher: 1 - 二狗出版社>
        # print(pub_obj.book_set) #关系管理对象
        # print(pub_obj.book_set.all())
    
        # 要求:想在Publisher里面拿到书的方法
        # 方法一: 不指定related_name  用表面小写_set
        # print(pub_obj.book_set)
        # print(pub_obj.book_set.all()) #出版社出版的所有书籍
        
        #方法二: 指定了related_name='books' books
        # 在Book类的publisher的字段中,指定一个叫related_name='books'
        # print(pub_obj.books)
        # print(pub_obj.books.all())
    基于字段的查询  #查出版社
    #基于字段的查询  #查出版社
        # 不指定了related_name 用表名小写就可以了 用book
        # ret = models.Publisher.objects.filter(book__title='二狗的幸福一生')
        # print(ret)  # <QuerySet [<Publisher: <Publisher: 1 - 二狗出版社>>]>
    
        # 指定了related_name='books' books
        # ret = models.Publisher.objects.filter(books__title='二狗的幸福一生')
        # print(ret) #<QuerySet [<Publisher: <Publisher: 1 - 二狗出版社>>]>
    
        # 指定了related_name='books' 并且 指定了 related_query_name='book',
        # ret = models.Publisher.objects.filter(book__title='二狗的幸福一生')
        # print(ret)  # <QuerySet [<Publisher: <Publisher: 1 - 二狗出版社>>]>

    # 查书

        # ret = models.Book.objects.filter(publisher__name='二狗出版社')
        # print(ret) #<QuerySet [<Book: <Book: 1 - 二狗的幸福一生>>, <Book: <Book: 3 - 二狗的产后护理>>]>
    # 注:跨表查询用__
  • 相关阅读:
    关于jar包的创建及引用相关问题
    关于Android系统一次能创建多大的Bitmap?
    Android开发导入第三方Jar包
    Javascript操作表格
    installanywhere 打包j2ee的方法II(转)
    C#网页自动登录和提交POST信息的多种方法
    JavaScript手册javascript语法javascript函数
    javascript 禁止复制网页
    [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式(转)
    android消息处理系统原理
  • 原文地址:https://www.cnblogs.com/wangkaiok/p/10492489.html
Copyright © 2020-2023  润新知