创建表
# models.py form django.db import models class Book(models.Model): # 表名book,django会自动使用项目名+我们定义的表名 # 如没有自定义主键,django会自动添加一个主键,字段名id 自增 name = models.CharField(max_length=20) # 字段名name 类型 vachar(20) price = models.IntegerField() # 字段名price 类型int pub_date = models.DateField() # 字段名pub_date 类型 date (时间戳) publish = models.ForeighKey(‘Publish‘) # 创建外键关联到Publish表的id字段,django会自动将该名称改为publish_id # 如果这样写 publish = models.ForeighKey(Publish) 括号内无引号,则必须将Publish类放到Book类的上面 def __str__(self): return self.name # 打印实例对象时显示为self.name class Publish(models.Model): name = models.CharField(max_length=32) city = models.CharField(max_length=32)
一对多的添加
# views.py from django.shortcuts import render from app_name.models import * # 导入models.py def add(request): # 增加数据的视图函数 # 方式一 直接对publish_id赋值 Book.objects.create(name=‘Linux基础‘,price=99,author=‘yuan‘,pub_date=‘2017-12-12‘,publish_id=2) # 方式二 通过创建一个publish的对象直接对publish赋值 publish_obj = Publish.objects.filter(name=‘人民出版社‘)[0] Book.objects.create(name=‘Linux基础‘,price=99,author=‘yuan‘,pub_date=‘2017-12-12‘,publish=publish_obj)
return HttpResponse(‘添加成功‘) 得出结论:1.publish_id 对应一个数字 2.publish对应一个publish的实例对象
一对多的查询
# 怎么使用一对多查询呢?book_obj = Book.objects.get(name=‘python‘)print(book_obj.name) # pythonprint(book_obj.publish) # Publish object 是与book对应的Publish的对象print(type(book_obj.publish)) # <class ‘app01.models.Publish‘> # 获取所有人民出版社的书(通过对象)# 通过书来找出版社(子表找主表)正向查询publish_obj = Publish.objects.get(‘人民出版社‘)[0]ret = book_obj=Book.objects.filter(publish=publish_obj)# 通过出版社来找书 (主表找子表) 反向查询publish_obj = Publish.objects.get(‘人民出版社‘)[0]ret = publish_obj.book_set.all() # 通过publish对象去找book表中其所有对应的数据 (book_set对就的就是子表book的书的集合)
# 通过双下划线查询 (可以用在filter与values中)1.获取所有人民出版社的书Book.objects.filter(publish__name=‘人民出版社‘)Publish.objects.filter(name=‘人民出版社‘).values(‘book__name‘)2.获取python这本书出版社的名字Publish.objects.filter(book__name=‘python‘)Book.objects.filter(name=‘python‘).values(‘publish__name‘)3.获取所有北京的出版社出过所有的书Book.objects.filter(publish__city=‘北京‘)Publish.objects.filter(city=‘北京‘).values(‘book__name‘)
原文地址:https://www.cnblogs.com/dangrui0725/p/9615641.html
时间: 2024-11-09 12:15:57