?
圖書管理系統筆記
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)
?
總結:為了拓展性高,一般使用半自動
。。。。寫代碼為自己留后路
?
?
?
?
?
?
?