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

posted @ 2022-11-24 21:55  凯宾斯基  阅读(147)  评论(0)    收藏  举报