图书管理系统笔记
redirect括号内可以直接写url
也可以直接写别名
但如果别名需要参数,必须使用reverse解析。
choices用法
使用场景:能列举完全的数据
#使用方法:xxx_choice
#1. get.xxx_display
#2. 如果超出范围,则显示原来的数据,如3,4
#3. 字段类型保证和列举类型一致
#类似枚举
class UserInfo(model.Model):name = models.CharField()addr_choice = ((1, "北京"),(2, "上海"),)addr = models.IntegerField(choice=addr_choice)#调用
print(obj.get_addr_display())#字符型,应该使用CharField()score_choice = (('A', '优秀'),('B', '良好'),)
MTV与MVC模型
#MTV: django号称是MVC模型
M: models
T: templates
V: views
#MVC: 其实django本质也是MVC
M: models
V: views
C: controller
多对多三种创建方式
全自动:利用ORM创建第三张关系表
优点:代码不需要写,支持orm操作第三张表
缺点:扩展性不足
class Book(models.Model):name = models.CharField(max_length=32)authors = models.ManyToManyField(to='Author')
纯手动
优点:扩展性高
缺点: 手写代码,不能使用orm提供的操作方法
class Book(models.Model):name = models.CharField(max_length=32)class Author(models.Model):name = models.CharField(max_length=32)class Book2Author(models.Model):book = models.ForeignKey(to='Book')author = models.ForeignKey(to='Author')info = models.CharField(max_length=32)
半自动
优点:扩展性高,orm有提供操作
缺点:代码多。没法使用add.set.remove.clear 四个方法
class Book(models.Model):name = models.CharField(max_length=32)# through_fields顺序,当前表是谁就谁在前面# through_fields以防第三张表有其他字段authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author')) class Author(models.Model):name = models.CharField(max_length=32)class Book2Author(models.Model):book = models.ForeignKey(to='Book')author = models.ForeignKey(to='Author')info = models.CharField(max_length=32)
总结:为了拓展性高,一般使用半自动
。。。。写代码为自己留后路