notas de estudio Python --Day11

notas de estudio Python --Day11

Django día siguiente.

serpiente

ORM (mapeo Objeto-Relación) medios de ese objeto - mapeo relacional, utilizando la correlación de metadatos entre los objetos y las bases de datos de descripción, programa de destino orientado a objetos persistió automáticamente a una base de datos relacional. Esencialmente datos se convierten de una forma a otra forma. Esto también implica gastos indirectos de ejecución adicional; sin embargo, si el ORM como un tipo de middleware, tendrá la oportunidad de hacer un montón de optimización, que no existe en el acta de la capa de persistencia. Más importante que es controlar la conversión y la necesidad de proporcionar la gestión de metadatos; pero una vez más, que estos costos para mantener los programas escritos a mano menos, e incluso si el cumplimiento de las normas de base de datos de objetos ODMG todavía necesita metadatos nivel de clase.

definiciones ORM

Con el mapeo objeto-relacional es métodos de desarrollo de software orientado a objetos y el desarrollo generado. enfoque de desarrollo orientado a objetos es incorporar el enfoque de desarrollo entorno de desarrollo de aplicaciones de clase empresarial de hoy en día, una base de datos relacional es los principales entornos de aplicaciones empresariales sistema de almacenamiento de datos de almacenamiento permanente de datos. datos relacionales objeto y son dos formas de entidades de negocio en forma de objeto de rendimiento entidad en la memoria, el rendimiento de datos relacionales en la base de datos. Se relaciones de asociación y de herencia entre objetos en la memoria y en la base de datos, los datos relacionales no pueden expresarse directamente a muchos a muchas asociaciones y herencia. Por consiguiente, el objeto - sistema de mapeo ORM relacional está generalmente presente en forma de middleware, los principales procedimientos de mapeo de objetos a una base de datos de datos relacional. Es a partir de la teoría matemática desarrollada a partir de dos diferencias significativas respecto a los principios básicos teóricos de la ingeniería de software orientado a objetos (por ejemplo, acoplamiento, la polimerización, el paquete) desarrollado sobre la base de la base de datos relacional. Para resolver este fenómeno desajuste, la tecnología de mapeo objeto-relacional entró en vigor. O / R O originó letra "sujeto" (objeto), y R se deriva de "relación" (relacional). Casi todos los programas en el interior, hay objetos y bases de datos relacionales. En la lógica de negocio y la capa de interfaz de usuario, que están orientados a objetos. Cuando se cambia la información del objeto, necesitamos los objetos de información almacenados en una base de datos relacional. Los productos populares como Java ORM de Hibernate, EntityFormerWork de .Net y así sucesivamente.

beneficios ORM

módulo de modelo en el marco MVC están incluidos ORM, principalmente para los desarrolladores a traer los siguientes beneficios:

  • Para lograr un desacoplamiento del modelo de datos y base de datos de base de datos de configuración simple puede ser fácilmente reemplazado sin necesidad de modificar el código.
  • Sólo la programación orientada a objetos, no es necesario escribir el código de la base de datos.
  • Definido en la clase MVC Model, por ORM mesa de base de datos relacional que corresponde a la relación entre las propiedades del objeto refleja el objeto, esta relación se asigna a la tabla de datos.

La creación de una demo

Crear un entorno virtual:

python -m venv env

Ejecución env \ activar en el directorio de secuencias de comandos, introduzca el entorno virtual

E:\python-projects\django_second_day\env\Scripts\activate

En un entorno virtual, instalar Django, mysqlclient instalación

python -m pip install django
pip install mysqlclient

Crea un proyecto Django

django-admin startproject django_second_day

Abra el archivo settings.py bajo django_second_day directorio para encontrar el artículo BASES DE DATOS, utilizar la base de datos por defecto es SQLites3

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Modificar la base de datos MySQL es la base de datos

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_second_day', #数据库名字,
        'USER': 'root', #数据库登录用户名
        'PASSWORD': '123456', #数据库登录密码
        'HOST': 'localhost', #数据库所在主机
        'PORT': '3306', #数据库端口
    }
}

Tenga en cuenta que la necesidad de base de datos para crear manualmente nuestro propio bien, nos devuelve al directorio raíz del proyecto, crear una aplicación bookapp

python manage.py startapp bookapp

A continuación vamos a bookapp registrado para el proyecto, en el archivo settings.py, añadir a su INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bookapp',
]

Definir las clases del modelo

aplicaciones de tipo de modelo se definen en la carpeta de la aplicación de archivos models.py, tales como nuestro modelo de definición de clase debe estar en el archivo "bookapp / models.py". Tenga en cuenta que la clase modelo de clase de modelo debe ser heredado de django.db.models en. Se definen dos clases, una biblioteca de clases, clase representa un personaje de los personajes del libro.

from django.db import models

# Create your models here.

# 图书类Book
class Book(models.Model):
    name = models.CharField(max_length=32)
    pub_date = models.DateField()
    read_num = models.IntegerField(default=0)
    isDelete = models.BooleanField(default=False)


# 人物类
class Human(models.Model):
    name = models.CharField(max_length=32)
    gender = models.BooleanField(default=True)
    # 人物简介
    comment = models.CharField(max_length=512)
    # 图书,人物和图书的关系定义为图书1:n人物
    book = models.ForeignKey('Book', on_delete=models.CASCADE)
    isDelete = models.BooleanField(default=False)

Y luego generar el archivo de migración, realice la migración

python manage.py makemigrations
python manage.py  migrate

De manera que la hoja de datos se ha establecido, y los nombres de tablas son bookapp_human bookapp_book.

Agregar una tabla de datos de unos pocos.

INSERT INTO bookapp_book(NAME,pub_date,read_num,isDelete) VALUES
('射雕英雄传','1981-1-1',12,0),
('天龙八部','1976-7-23',36,0),
('倚天屠龙记','1998-11-2',20,0),
('鹿鼎记','1955-12-12',58,0);

INSERT INTO bookapp_human(NAME,gender,book_id,COMMENT,isDelete) VALUES
('郭靖',1,1,'降龙十八掌',0),
('黄蓉',0,1,'打狗棍法',0),
('黄药师',1,1,'弹指神通',0),
('欧阳锋',1,1,'蛤蟆功',0),
('乔峰',1,2,'降龙十八掌',0),
('段誉',1,2,'六脉神剑',0),
('虚竹',1,2,'天山六阳掌',0),
('王语嫣',0,2,'神仙姐姐',0),
('张无忌',1,3,'九阳神功',0),
('赵敏',0,3,'郡主',0),
('谢逊',1,3,'七伤拳',0),
('张三丰',1,3,'太极拳',0),
('康熙',1,4,'钱',0),
('韦小宝',1,4,'抓奶龙抓手',0);

Vista personalizada, abierta bookapp / views.py y edición.

from django.shortcuts import render, redirect
from bookapp.models import *
from datetime import date

# Create your views here.

# 首页查询所有图书并返回
def index(request):
    book_list = Book.objects.all()
    return render(request, 'bookapp/index.html', {'list': book_list})

# 创建新图书
def save(request):
    book = Book()
    book.name = '龙珠'
    book.pub_date = date(1986,12,2)
    book.save()
    return redirect('/bookapp')

# 逻辑删除图书
def delete(request, id):
    book = Book.objects.get(id=int(id))
    book.delete()
    return redirect('/bookapp')

La creación de carpeta de plantillas / bookapp en el directorio raíz, a continuación, crear index.html en el interior bookapp.

<!DOCTYPE html>
<html lang="utf-8">
    <head>
        <title>书</title>
    </head>
    <body>
        <a href="/bookapp/save/">新增</a>
        <ul>
            {% for book in list %}
            <li>书名:{{book.name}}  <a href="/bookapp/delete{{book.id}}/">删除</a></li>
            {% endfor %}
        </ul>
    </body>
</html>

La creación de urls.py En bookapp, configurar la URL a continuación.

from django.urls import path, re_path
from . import views

urlpatterns = [
	path('', views.index, name='index'),
    path('save/', views.save, name='save'),
    re_path(r'^delete(\d+)/$',views.delete,name='delete'),
]

urls.py. bajo el directorio django_second_day modificado

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('bookapp/', include('bookapp.urls')),
]

Entrar en la consola python manage.py runserverdel servidor se está ejecutando. el acceso al navegador localhost:8000/bookapp, por lo que una pequeña demostración es completa.

atributos definidos

Django creará clases del modelo creamos una columna de clave principal defecto aumentará automáticamente idcada clase modelo puede tener sólo una columna de clave principal, si se utiliza la opción de establecer un atributo como la clave principal de esta tabla, a continuación, Django no creará una clave principal por defecto.

Propiedad restricciones de nomenclatura:

  • No se puede utilizar palabras clave de Python reservados
  • No permita el uso de un guión bajo continuo, que está determinada por la forma en la consulta de Django
  • Se especifica cuando el tipo de campo definido atributo, especificado por los parámetros de campo de tipo opción, por ejemplo:
属性 = models.字段类型(选项)

Tipo de campo

Tipo de campo significado
AutoField IntegerField crecimiento automático, es el crecimiento automático de números enteros, por lo general no es necesario, Django creará automáticamente una propiedad llamada atributo id crecer de forma automática cuando no se especifica
BooleanField campos de tipo boolean, Verdadero o Falso
NullBooleanField Tres valores, Null, True, False
CharField (max_length = longitud de caracteres) parámetro de cadena es la longitud máxima de
Campo de texto grandes campos de texto
IntegerField entero
DecimalField (MAX_DIGITS = ninguno, decimal_places = Ninguno) Decimal de coma flotante, el primer parámetro es el número total de bits, los segundos decimales dedo
FloatField flotador
DateField [auto_now = FALSE, auto_now_add = False])) Fecha, auto_now indicar cada vez que un objeto guardado se guarda automáticamente en el momento actual, por indicación de la hora actualizada, siempre apunta a la última fecha de modificación, que es la hora actual, el valor predeterminado es falso, auto_now_add representa el momento en que se crea el objeto después de guardar creado , que es el momento en que crea por primera vez, la marca de tiempo se utiliza para crear puntos siempre a la hora actual, el valor predeterminado es falso. Tenga en cuenta que dos parámetros no son lo mismo es cierto
TimeField Al mismo tiempo, parámetros y DateField
DateTimeField Fecha y hora, los mismos parámetros y DateField
FileField Archivos, subir archivos de campo
ImageField Heredado de FileField, para verificar el contenido subido a garantizar una imagen válida

opciones

opciones significado
nulo Es cierto que para permitir el vacío, el valor predeterminado es False
blanco Es cierto que para permitir el campo está vacío, el valor predeterminado es Falso
La diferencia es más de nulo es un conceptuales categorías de base de datos, validación de formularios en blanco concepto Categoría
db_column Nombre del campo no se especifica, utilice el nombre de la propiedad
db_index True indica que este campo se crea en la tabla de índice, el valor predeterminado es Falso
defecto El valor por defecto
Clave primaria True indica que el campo es la clave principal, el valor predeterminado es Falso, generalmente para uso opciones AutoField
único True para indicar este campo debe ser único, el valor predeterminado es Falso

Modificarse en dos clases bookapp / Código models.py es el siguiente

from django.db import models

# Create your models here.

# 图书类Book
class Book(models.Model):
    # 添加db_column选项,修改数据库字段名为title
    name = models.CharField(max_length=32, db_column="title")
    pub_date = models.DateField()
    read_num = models.IntegerField(default=0)
    isDelete = models.BooleanField(default=False)


# 人物类
class Human(models.Model):
    name = models.CharField(max_length=32)
    # 设置数据库字段为sex
    gender = models.BooleanField(default=True, db_column="sex")
    # 人物简介,null数据库字段允许为空,blank是指输入框不能为空
    comment = models.CharField(max_length=512, null=True, blank=False)
    # 图书,人物和图书的关系定义为图书1:n人物
    book = models.ForeignKey('Book', on_delete=models.CASCADE)
    isDelete = models.BooleanField(default=False)

Generar la migración de archivos, y luego realizar la migración. Ver el contenido de un campo cambia la base de datos.

investigaciones sobre el terreno

A continuación, añadir la siguiente configuración en el archivo settings.py para la instrucción SQL impreso en la consola

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },

    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}

En Django condiciones de consulta se pueden realizar llamando a un número de métodos, tales como filter (), la sintaxis excluir (), get () y otros métodos, los parámetros son como sigue

属性名称__比较运算符=值

Descripción: Hay dos subrayado y la comparación entre el nombre del atributo, el nombre del atributo no puede contener guiones bajos consecutivos.

operador condicional

Igualdad uso exacto, tales como consulta Nº 1 libro

book = Book.objects.filter(id__exact=1)
简化为
book = Book.objects.fiter(id=1)

consulta difusa utilizando la contiene, contiene

book = Book.objects.filter(title__contains='雕')

Si incluyes%, sin escapar, directamente.

... al principio o al final startswith, endswith: comenzando con un valor o final especificado

book = Book.objects.filter(title__startswith='射')

Arriba están los operadores sensibles de casos, estos operadores juntos antes de i representa un insensible caso, como iexact, icontains, istartswith, iendswith.
Vaciar consulta isnull: es nulo.

book = Book.objects.filter(title__isnull=False)

Rango de consulta en: si o no incluido en el ámbito de aplicación.

book = Book.objects.filter(in__in=[1,2,3])

Comparativo consulta gt, GTE, lt, lte: mayor que, mayor igual, menor que, o menos.
Identificación consulta o igual a 2 libros

book = Book.objects.filter(id__gte=2)

no es igual a la utilización del filtro de exclusión ().
Identificación consulta es igual al libro de 1

book = Book.objects.exclude(id=1)

Fecha de consulta año, mes, día, week_day, hora, minuto, segundo: la fecha y hora para el tipo de propiedad es operado.
Consultas en 1981 publicaron el libro.

book = Book.objects.filter(pub_date__year=1981)

Consulta el 1 de mayo 1985 trabajo publicado

book = Book.objects.filter(pub_date__gt=date(1985, 5, 1))

Nota: filtro () devuelve el método del conjunto de consultas, el resultado es el contenido [] valor de la lista, el método get () devuelve un único resultado.

F objeto

En comparación con el valor de la constante anterior consultas de atributos son los objetos, y los objetos que utilizan django.db.models.F comparar las dos propiedades. La sintaxis es la siguiente:

F(属性名)

Por ejemplo, el ID de la consulta es menor que la cantidad de libros de lectura

book = Book.objects.filter(id__lt=F('read_num'))

Q objetos

Una pluralidad de filtros e individualmente representan una relación lógica entre las llamadas, equivalentes y.
Las consultas de lectura mayor de 30, y un nombre como el libro "Dragón"

book = Book.objects.filter(read_num__gt=30, title__contains='龙')
或
book = Book.objects.filter(read_num__gt=30).filter(title__contains='龙')

O OR lógica de la consulta necesita django.db.models.Q () unión a la diana | implementación del operador. sintaxis:

Q(属性名__运算符=值)

Consulta de nombres como "Dragón" o el libro "British"

book = Book.objects.filter(Q(title__contains="龙") | Q(title__contains="英"))

La lógica también puede ser utilizada y, de hecho, Q () implementación del objeto, un operador y necesidad de ser utilizado.
Las consultas de lectura mayor de 30, y un nombre como el libro "Dragón"

book = Book.objects.filter(Q(read_num__gt=30) & Q(title__contains='龙'))

La no utilización del operador ~.
Consulta número no es igual al libro de 1

book = Book.objects.filter(~Q(id=1))

función de agregado

El uso agregado () llamada a la función de agregado de filtro, Avg, Count, Max, Min , Suma, son como se define en las django.db.models.
Descubre todos los títulos de libros

book = Book.objects.aggregate(Count('id'))

En este caso, el valor de retorno es un diccionario de tipo agregado, con el siguiente formato:

{'属性名__聚合类小写': 值}
比如上述
{'id__count': 4}

De hecho, utilizando el recuento Aggregate generalmente no se usa filtro (), pero de la manera siguiente, se devuelve un número

book_num = Book.objects.count()

QuerySets

No acaba de mencionar, filter () devuelve el método se establece un valor de la consulta, entonces ¿cuál es la consulta se establece? Representa un conjunto de consultas obtenidos de la base de datos y el conjunto de objetos, el método devuelve conjunto algunos filtros de consulta, el significado del conjunto de consulta puede ser cero, uno o más filtros. Filtros limitan los resultados de la consulta basada en los parámetros dados desde la perspectiva de SQL, el conjunto de consulta es equivalente al resultado de la instrucción de selección, el filtro es una restricción, y donde limitar cláusulas similares.

Volver conjunto problema filtro:

  • todos (): devuelve todos los datos
  • filter (): Devuelve el satisface las condiciones de datos
  • excluir (): devuelve los datos que no sean de la condición, que corresponden a porciones en las que la instrucción SQL no palabras clave
  • order_by (): para ordenar los resultados

Devolver un solo valor del filtro:

  • get (): Devuelve el satisface objeto una condición de un solo
    • Si no encuentra la causa ".DoesNotExist clase del modelo" anormal
    • Si se devuelve más de uno, que dará lugar a "clase del modelo .MultipleObjects.Returned" anormal
  • count (): Devuelve el número total de los resultados de la consulta actual.
  • agregada (): polimerización, devuelve un diccionario.

Determinar si existe un conjunto de datos de consulta: método exist () para determinar si un conjunto de datos de consulta, si se devuelve True, de lo contrario falso.

dos características

  1. Inerte realizar: Crear un conjunto de consultas no acceder a la base de datos hasta que llame, tendrá acceso a la base de datos, llamar a los métodos iterativos son los datos, serialización, que se utiliza en conjunción con si.
  2. Cache: Usar el mismo conjunto de consulta, la consulta a la base de datos utilizará en primer lugar, a continuación, almacenar en caché el resultado, utilizará los datos en caché cuando la segunda llamada.

Limitar el conjunto de consultas

Pueden ser suprimida o cortar un conjunto de consulta estándar, es equivalente al límite y compensar cláusulas SQL. No es compatible con índices negativos. Tras el regreso de la consulta establecido para rebanar un nuevo conjunto de consultas, la consulta no se ejecutará inmediatamente. Si la adquisición de un objeto, directamente [0] es equivalente a [0: 1] .get (), pero si no hay datos, [0] IndexError iniciador excepción, [0: 1] .get () si no hay datos DoesNotExist iniciador anormal .

clase del modelo relacional

Relación base de datos relacional que comprende tres, uno a uno, campo de tipo muchos en la Django correspondiente sigue:

  • ForeignKey: muchos, este campo debe definirse en muchos terminan.
  • ManyToManyField: muchos a muchos, las definiciones de campo en cada extremo.
  • OneToOneField: una, las definiciones de campo en cada extremo.

consultas relacionadas

Django se dan cuenta asociada consulta, hay dos maneras, una es a través de la ejecución del objeto de consultas relacionales, uno es a través de la implementación de la clase modelo asociado con la consulta.

Objeto ejecución de la consulta relacional

Cuando se define una clase del modelo, se puede especificar una de las tres asociaciones, la relación más común en tiempo-a-muchos, esta vez escrita "libros - la gente", como muchos-relación. Se accede por una o varias sintaxis de acceso:

1 的一方模型类.多对应的一方模型类名小写_set
也就是:
book = Book.objects.get(id=1)
book.human_set.all()

A su vez, el acceso multi-parte en una sintaxis partido:

直接使用多对应的模型类对象.该模型类中关系类的属性名称
human = Human.objects.get(id=1)
human.book

Accede a una sintaxis objeto ID de clase correspondiente modelo asociado:

多对应的模型类对象.关联类属性_id
human = Human.objects.get(id=1)
human.book_id

Por clase de modelo asociado a la ejecución de la consulta

Consultar una clase de modelo de datos mediante una condiciones de clase multi-modelo, la siguiente sintaxis

关联模型类名小写__属性名__条件运算符=值

Nota: No se puede llenar parte __ operadores condicionales, que representa iguales, y los resultados de la misma combinación interna sql

Consulta se asocia con el nombre de "Guo", el héroe del libro

books = Book.objects.filter(human__name__contains='郭')

Por una clase modelo multi-criterios clases del modelo de datos de consulta, la sintaxis es la siguiente

一模型类在多对应的模型类中关联属性名__一模型类中的属性__条件运算符=值

La gente investiga los correspondientes títulos de libros que contienen "Dragón" en

human = Human.objects.filter(book__title__contains='天龙')

autocorrelación

Para el directorio de tres provincias, este tipo de datos, similar a la estructura de la tabla, y los datos son limitados, podemos establecer los datos asociados de la mesa, el campo de clave principal asociado con esta tabla. Área puede definir una clase.

# 定义用于表示地区的类,存储省、市、区三级目录信息
class Area(models.Model):
	# 名称
	name=models.CharField(max_length=32)
	# 父级id
	parent=models.ForeignKey('self', null=True, blank=True)

Realizar la migración

python manage.py makemigrations
ython manage.py migrate

Escribimos una plantilla para la información en el área de visualización de la página

<!DOCTYPE html>
<html lang="utf-8">

<head>
    <title>area信息</title>
</head>

<body>
    当前地区:{{area.name}}
    <hr />
    上级地区:{{area.parent.name}}
    <hr />
    下级地区:
    <ul>
        {%for a in area.area_set.all%}
        <li>{{a.name}}</li>
        {%endfor%}
    </ul>
</body>

</html>

Añadir método de área en el views.py

def area(request):
    area = Area.objects.get(id=2)
    return render(request, 'bookapp/area.html', {'area': area})

Configuración de la dirección URL en urls.py

path('area/', views.area, name='area')

Añadir unos datos en la base de datos

INSERT INTO `django_second_day`.`bookapp_area`(`id`,`name`,`parent_id`) VALUES ( '1','黑龙江',NULL);
INSERT INTO `django_second_day`.`bookapp_area`(`id`,`name`,`parent_id`) VALUES ( '2','哈尔滨市',NULL);
INSERT INTO `django_second_day`.`bookapp_area`(`id`,`name`,`parent_id`) VALUES ( '3','平房区','2');
INSERT INTO `django_second_day`.`bookapp_area`(`id`,`name`,`parent_id`) VALUES ( '4','南岗区','2');
INSERT INTO `django_second_day`.`bookapp_area`(`id`,`name`,`parent_id`) VALUES ( '5','佳木斯市','1');

Un navegador web.

http://localhost:8000/bookapp/area/

Se puede ver información relacionada de la pantalla en la página.

Los ejemplos del modelo de clase método

  • str (): cuando se llama el objeto en una cadena.
  • Guardar (): Clase de modelo de objeto se guarda en la tabla de datos, marco de ORM se convierte automáticamente a la instrucción de inserción o de actualización correspondiente.
  • Eliminar (): El objeto modelo se elimina de la tabla de datos, marco ORM en correspondiente instrucción de eliminación.

Propiedades de la clase modelo

Objetos: Gerente, models.Manager tipo de objeto para interactuar con la base de datos. Cuando no hay un administrador de la clase del modelo, Django genera un director llamado objetos para cada clase del modelo, el gerente de encargo, Django objetos del gestor por defecto ya no se generan.

clase libro define la sintaxis book_manager gestor de modelo es el siguiente:

class Book(models.Model):
	...
	book_manager = models.Manager()

manager

administrador de modelo de Django es una operación de base de datos de interfaz, cada clase de solicitud de modelo de Django tiene al menos un administrador. Django soporta clase de gestión personalizada, heredado de models.Manager.

Gestor personalizado clase se utiliza principalmente en dos casos:

  • Modificar el conjunto búsqueda original, reescribir todo método ()
  • El gerente método para agregar clases adicionales, tales como la inserción de datos en la base de datos.
  1. Modificar el conjunto búsqueda original, reescribir todo método ().

bookapp abierta / archivo models.py, definir BookManager

# 图书类管理器
class BookManager(models.Manager):
	def all(self):
		# 查询没有被删除的图书信息,重写 all() 方法
		return super().all().filter(isDelete=False)

Gestor definido en el libro de clase del modelo

class Book(models.Model):
    ...
    books = BookManager()
  1. Añadir add_book método en el Administrador
class BookManager(models.Manager):
    ...
    #创建模型类对象,接收要添加的信息
    def add_book(self, title, pub_date):
        #创建模型类对象self.model可以获得模型类
        book = self.model()
        book.title = title
        book.pub_date = pub_date
        book.read=0
        book.isDelete = False
        # 将数据插入进数据表
        book.save()
        return book

llamado por

book=Book.books.add_book("add", date(2001,1,1))

Opciones Yuan

Modelo de definición de clase de la clase Meta, para configurar la información de metadatos, tales como el uso de auto tabla Nombre de definición db_table.

El nombre por defecto de la tabla es:

<app_name>_<model_name>
例:
bookapp_book

Modificamos la mesa libro generada clase de modelo de datos denominado libro, añadir el siguiente en la clase del modelo del libro, de la siguiente manera

class Book(models.Model):
	...
	# 定义元选项
	class Meta:
		db_table='book'

epílogo

Este contenido se da de baja por varios días, pero también reforzar las que aprender!
Si encontrar mis artículos en los que hay un error o tiene alguna buenas ideas pueden ponerse en contacto conmigo, estudiamos juntos progresar juntos, mi dirección de correo electrónico está [email protected]

Vamos a hacer más de esos!

Publicado 26 artículos originales · ganado elogios 2 · Vistas 2334

Supongo que te gusta

Origin blog.csdn.net/qq_42909545/article/details/103375107
Recomendado
Clasificación