python manage.py makemigrations 生成迁移文件
python mamage.py migrate 真正把记录同步到数据库上面
图书管理 书-作者-出版社-作者简介
一对一 OneToOneField字段
Book-AuthorDetail
class Author(models.Model):
name = models.CharField(max_length=32)
phone = models.BigIntegerField()
# 一对一字段建在哪张表都可以,但是推荐你建在 查询频率比较高的那张表
author_detail = models.OneToOneField(to='AuthorDetail')
# 使用OneToOneField字段创建表的时候会自动给该字段添加_id后缀
class AuthorDetail(models.Model):
addr = models.CharField(max_length=255)
age = models.IntegerField()
一对多 ForeignKey
Book-Publish
class Book(models.Model):
title = models.CharField(max_length=32)
# 总共八位 小数占两位
price = models.DecimalField(max_digits=8,decimal_places=2)
# 书和出版社是一对多的关系 外键字段键在多的一方
publish_id = models.ForeignKey(to='Publish') # to指定跟谁是外键关联的,默认关联的是表的主键字段
# ForeignKey字段 django orm在创建表的时候 会自动给该字段添加_id后缀
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=255)
多对多 ManyToManyField
Book-Author
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2)
publish_id = models.ForeignKey(to='Publish')
# 书和作者是多对多的关系,外键字段建在任何一方都可以,推荐你建在查询频率比较高的一方
authors = models.ManyToManyField(to='Author')
"""authors字段仅仅是一个虚拟字段,不会再表中展示出来,仅仅是用来告django orm 书籍表和作者表示多对多的关系
自动会创建第三张表,多对多关系表
"""
class Author(models.Model):
name = models.CharField(max_length=32)
phone = models.BigIntegerField()
author_detail = models.OneToOneField(to='AuthorDetail')
1.get()
当查询条件不存在的时候,会直接报错 , 如果存在会直接给你返回数据对象本身 不推荐使用
res = models.Userinfo.objects.get(username=username)
2.filter()
当查询条件不存在的时候,不会报错会返回一个空,返回的是封装过的列表嵌套对象,这个列表支持正数的索引和切片,不支持负数的切片索引,取数据的时候推荐使用它的内置方法(它的底层还是通过切片实现的)
res = models.Userinfo.objects.filter(username=username)
res.first() #取第一个元素
3.all()
拿到表所有数据,返回数据列表嵌套对象
user_queryset = models.Userinfo.objects.all()
print(user_queryset.query)#只有queryset对象可以查看原生的sql语句
添加
user_obj = models.Userinfo.objects.create(username=username,password=password)
# insert into userinfo(username,password) values('admin','666');
1.create方法会有一个返回值 返回值就是当前被创建的数据对象
2.user_obj=user(username="zx")利用对象点方法方式
user_obj.save() 把当前对象保存到数据库中
修改
models.Author.objects.filter(pk=author_id).update(name=name,phone=phone)
#pk为查询主键,更改查询出来的所有数据对象
也可以获取对象.属性修改.save() 不推荐,所有数据全部重新写入,效率低
删除
models.Author.objects.filter(pk=author_id).delete()
#批量删除
字典传值
today = datetime.datetime.now()
content = {'date':today}
return render(request,'login.html',content)
{{date}}
函数局部变量全部传递local()
user_queryset = models.Userinfo.objects.all()
return render(request,'userlist.html',locals())
{% for re in res %}
{% endfor %}
原文:https://www.cnblogs.com/zx125/p/11722314.html