django外键的使用总结

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值