外键的操作
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 - 二狗的产后护理>>]>
# 注:跨表查询用__
作者:wangkaiok —— 小菜鸟111
出处:http://www.cnblogs.com/wangkaiok/
本文版权归作者和博客园共有,但未经作者同意禁止转载,转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。