0
点赞
收藏
分享

微信扫一扫

Django从理论到实战(part30)--Meta配置

学习笔记,仅供参考

参考自:Django打造大型企业官网–Huang Y;

本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的记录一下。


Meta配置



对于模型级别的配置,我们可以在models.py模块中定义一个叫​​Meta​​的类来处理。

在这个类中,我们可以添加一些类属性来控制模型,比如,我们想要在数据库映射时使用自己指定的表名,而不是使用模型的名称,那么我们可以在​​Meta​​​类中设置​​db_table​​属性,例如:

class Book(models.Model):
name = models.CharField(max_length=20,null=False)
desc = models.CharField(max_length=100,name='description',db_column="description1")

class Meta:
db_table = 'book_model'



Meta类的常用配置



  • db_table

该参数可以设置这个模型映射到数据库中的表名,如果没有指定这个参数,那么在映射的时候将会使用​​应用名_模型名​​来作为默认的表名。



  • ordering


设置在提取数据的排序方式,比如我想在查找数据的时候根据price降序排序:

ordering = ['-price']



举个例子



修改models.py:

from django.db import models

# Create your models here.

class Book(models.Model):
#定义一个自增长的主键
bookid = models.AutoField(primary_key = True)
name = models.CharField(max_length=20,null=False)
author = models.CharField(max_length=20,null=False)
price = models.FloatField(default=0)

def __str__(self):
return "[name:{}, author:{}, price:{}]".format(self.name, self.author, self.price)

class Meta:
db_book = "mynewbookstore"
#定义数据库中的表名为mynewbookstor
ordering = ['-price', 'name']
#按照价格降序排序,相同时参考name参数



添加路由:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
path('add_book/', views.add_book),
path('show_books/', views.show_books),
]



设置视图函数:

from django.http import HttpResponse
from .models import Book

# Create your views here.

def add_book(request):
book = Book(name = "统计学", author = "贾俊平", price = 25)
book.save()
return HttpResponse("图书添加成功!")

def show_books(request):
books = Book.objects.all()
for book in books:
print(book)
return HttpResponse("<h2>ARE YOU OK?</h2>")



迁移:

python manage.py makemigrations
python manage.py migrate



查看数据库中的数据表:

mysql> show tables;
+----------------------------+
| Tables_in_mynewbook |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| mynewbookstore |
+----------------------------+
11 rows in set (0.00 sec)

可以看到,表名已经改为了mynewbookstore



向http://127.0.0.1:8000/bookstore/show_books/发起请求:

Django从理论到实战(part30)--Meta配置_ico



查看终端:

[name:应用预测建模, author:Max, price:30.0]
[name:多元统计分析, author:何晓群, price:25.0]
[name:统计学, author:贾俊平, price:25.0]
[name:网络工程师, author:朱小平, price:21.0]
[name:应用回归分析, author:何晓群, price:20.0]
[name:mysql必知必会, author:Ben, F, price:15.0]
[09/Jul/2020 11:02:57] "GET /bookstore/show_books/ HTTP/1.1" 200 20
Not Found: /favicon.ico
[09/Jul/2020 11:02:58] "GET /favicon.ico HTTP/1.1" 404 2089

可以看到,数据按照price以及name进行了排序.

举报

相关推荐

0 条评论