models.py中的内容
from django.db import models
# Create your models here.
class Author(models.Model):
name = models.CharField(max_length=20,verbose_name="姓名",help_text="姓名",unique=True)
age =models.IntegerField(max_length=3,verbose_name="年龄",help_text="年龄")
create_time = models.DateTimeField(auto_now_add=True,verbose_name="创建时间",help_text="创建时间")
update_time = models.DateTimeField(auto_now=True,verbose_name="更新时间",help_text="更新时间")
class Meta:
db_table = "cs_author"
verbose_name = "作者信息表"
class Book(models.Model):
book_name = models.CharField(max_length=20, verbose_name="书名", help_text="书名")
book_info = models.TextField(verbose_name="书的详情描述", help_text="书的详情描述")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间", help_text="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间", help_text="更新时间")
# 外键,其中related_name是可以直接通过主表的对象直接调用,返回的是一个 Manage子对象,可直接调用all(),filter,get()等方法
book_foreign = models.ForeignKey("Author",on_delete=models.CASCADE,related_name="laowang",help_text="外键",verbose_name="外键")
class Meta:
db_table = "cs_book"
verbose_name = "书籍表"
view.py文件中的内容
class ProjectsInfo(View):
def get(self,request):
# 通过从表查父表方法1
#得到的sql:SELECT `cs_author`.`id`, `cs_author`.`name`, `cs_author`.`age`,
# `cs_author`.`create_time`, `cs_author`.`update_time` FROM `cs_author`
# INNER JOIN `cs_book` ON (`cs_author`.`id` = `cs_book`.`book_foreign_id`)
# WHERE `cs_book`.`book_name` = '失落的世界'"
# 条件为子表的模型类的名称小写__字段名称__gt=2
# au = Author.objects.filter(book__book_name="失落的世界")
# 通过子表查父表方法2(直接通过子表中的外键属性就可以访问到父表的属性)
bo = Book.objects.get(book_name="失落的世界")
auth_name = bo.book_foreign.name
#通过父表查子表(不能直接调用对应的子表的属性,返回的是一个QueryManage对象)
# au = Author.objects.get(name="jack")
# na = au.laowang.get(pk=1)