python Django模型的应用


前言

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()
  1. 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 是整个的编译

猜你喜欢

转载自blog.csdn.net/qq_35911309/article/details/109534701