django moddle 关联查询
https://blog.csdn.net/qq_41470573/article/details/120505432
https://www.runoob.com/django/django-orm-2.html (看这个)
多对多 会生成多一张关系表
一对多就不会生成一张关系表 (外键写到多的那张表)
authors会在数据库变成authors_id 字段
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5, decimal_places=2)
authors = models.ForeignKey("Author",on_delete=models.CASCADE) #多对多
class Meta:
db_table = 'dog_book' # 通过db_table自定义数据表名
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.SmallIntegerField()
class Meta:
db_table = 'dog_author' # 通过db_table自定义数据表名


数据插入
1、先查出来再往里面插入
pub_obj1 = models.Author.objects.filter(pk=1).first()
models.Book.objects.create(title="66",price="66",authors=pub_obj1)
2、先查出来得到具体数字 或者直接插入数字
pub_obj1 = models.Author.objects.filter(pk=1).first()
pk=pub_obj1.pk
print(pk)
models.Book.objects.create(title="66",price="66",authors_id=pk)
可以直接插入数字
models.Book.objects.create(title="66",price="66",authors_id=4)
数据查询
##正向查询
获取另外一张表的字段 字段名__关联另外一张表的字段名
book = models.Book.objects.filter(pk=1).all().values_list("authors__name")
# # 正向查询 正向:属性名称__跨表的属性名称
aa=models.Book.objects.filter(authors__name="lucax").values_list("title","price")
print(aa)
##反向:小写类名__跨表的属性名称
aa = models.Author.objects.filter(book__title="1").values_list("name", "book__price")
print(aa)
# # 正向查询
book = models.Book.objects.filter(pk=1).first()
res = book.authors.name
print(res)
# #反向查询 对象.小写类名_set(pub.book_set)
Author = models.Author.objects.filter(pk=1).first()
res = Author.book_set.all()
print(book)
另外一种更方便的写法
https://www.cnblogs.com/kaibindirver/p/17147733.html
添加外键查询外键子段的方法
https://www.cnblogs.com/kaibindirver/p/17227809.html

浙公网安备 33010602011771号