前言
MVC框架中重要到一部分包含ORM(Object Relational Mapping)提示:以下是本篇文章正文内容,下面案例已测试,可供参考
一、Django 建立模型
1.1 models.py 文件
抽象继承
class CommonInfo(models.Model):
className = models.CharField(max_length=20, verbose_name="分类名称")
class Meta:
abstract=True
class BookClass(CommonInfo):
desc = models.CharField(max_length=100, default="1")
def __str__(self):
return self.className
自定义模型管理器models.Manager()
class BookClassManager(models.Manager):
def __test__(self):
return "testManager"
BookClass类中增加
newobject = models.Manager()//覆盖API BookClass.objects
多表继承
class School(models.Model):
schoolName = models.CharField(max_length=20)
address = models.CharField(max_length=60)
def __str__(self):
return self.schoolName
class Student(School):
studentName = models.CharField(max_length=20)
number = models.CharField(max_length=10)
def __str__(self):
return self.studentName
外键关联(models.ForeignKey)
class BookInfo(models.Model):
bookClass = models.ForeignKey(BookClass,on_delete=models.CASCADE,verbose_name="图书分类",null=True,blank=True)
title = models.CharField(max_length=20)
price = models.IntegerField(default=5)
bookDesc = models.CharField(max_length=20)
# bookImage = models.ImageField(upload_to="upload/%Y%d", default="upload/deafault.jpg")
isHot = models.BooleanField(default=True)
moreDesc = models.TextField(default="")
1.2 admin.py文件
代码如下(示例):
from book.models import BookInfo, BookClass,School,Student
# Register your models here.
class BooInfoAdmin(admin.ModelAdmin):
list_display = ('id','title', 'price', 'bookDesc','isHot')
class BookClassAdmin(admin.ModelAdmin):
list_display = ('id','className')
class SchoolAdmin(admin.ModelAdmin):
list_display = ('id',"schoolName")
class StudentAdmin(admin.ModelAdmin):
list_display = ("id","studentName")
admin.site.register(BookInfo, BooInfoAdmin)
admin.site.register(BookClass,BookClassAdmin)
admin.site.register(School,SchoolAdmin)
admin.site.register(Student,StudentAdmin)
二 Django QuerySet API
提示:数据库接口相关的接口(QuerySet API)
Terminal或命令窗口中输入:python manage.py shell
1.QuerySet 创建对象的方法
方法一
>>> from book.models import BookClass
>>> BookClass.objects.create(className="python")
方法二
>>> from book.models import BookClass
>>>b=BookClass(className="TT")
>>>b.save()
- QuerySet获取对象
>>> BookClass.objects.all()//显示所有对象
>>> BookClass.objects.all().count()//获取数量
>........等等
…其他QuerySet请参考https://code.ziqiangxuetang.com/django/django-queryset-api.html
三.部分bug
问:
django在models.py新增表字段出现“You are trying to add a non-nullable field 'message' to usermessage without a
”
答:
在数据库中查到对应得数据表,但是这个时候需要再增加某些字段,就需要修改下models.py 增加default=""
问:
Django 数据库建表的时候 No migrations to apply
答:
数据库中建好了表,后面数据库直接删掉了。而数据库表django_migrations
,之后有一个app字段还需处理。
问
执行 python manage.py makemigrations出现 no changes detected
答
INSTALLED_APPS 中查找app
问: python manage.py makemigrations "pymysql.err.ProgrammingError: (1146, "Table 'enterprise_internet.bossInfo_prod_inst' doesn't exist")"
答: python manage.py makemigrations 是整个的编译