前言:上一篇文章講了django的基本操作,本文將繼續記錄下django模型類的基本用法。這裏用的是django2.1+python3.5。
一、Models模塊的使用:
每個App中的models.py文件是我們建立數據模型的地方,數據模型可以說是實現各種功能業務的基礎。在models文件中我們定義數據庫中表的形式,在這之前我們先要安裝好數據庫。django默認的數據庫是sqlite,一般我們用的Mysql較多,先安裝好mysql。然後需要在Mysql中新建一個數據庫,這個不能再django中建,django只能建表。
1、Mysql的設置:
安裝好Mysql後我們需要在django進行設置,第一步,在項目配置文件settings.py中更改設置,把DATABASES這一欄設置爲Mysql,如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #mysql數據庫
'NAME':'v1', #數據庫名
'USER':'root', #用戶名
'PASSWORD':'XXXXXX', #密碼
'HOST':'localhost',
'PORT':'',
}
}
第二步,安裝mysql的連接工具pymysql庫,直接pip install PyMySQL安裝。然後在項目同名文件夾下的__init__.py文件中作如下設置:
import pymysql
pymysql.install_as_MySQLdb()
2、創建表
django支持的常用的字段類型(部分)如下:
- BooleanField:true/false
- CharField(max_length=字符長度):字符串
- IntegerField:整數
- DecimalField(max_digits=None, decimal_places=None):浮點數,max_digits:位數總數,decimal_places:小數位數
- DateTimeField[auto_now=False, auto_now_add=False]):日期和時間,auto_now表示對象每次跟新時間跟着更新,auto_now_add表示顯示第一次創建的時間
- ImageField(upload_to='文件名'):圖片,數據庫實際保存的是圖片的路徑,參數填static文件夾下放置圖片的文件夾名
- ForeignKey(on_delete=models.CASCADE):外鍵,django2.0以後版本必須要加on_delete參數,外鍵的約束條件,CASCADE模式表示父表修改後子表跟着修改,當然還有其他模式。
字段選項:
- blank:如果爲True,則該字段允許爲空白,默認值是 False
- default:默認值
- primary_key:若爲 True, 則該字段會成爲模型的主鍵字段
- unique:如果爲 True, 這個字段在表中必須有唯一值
models模型類的創建:
在models.py文件中我們用一個類表示數據庫一張表,如下是我之前創建的兩張表,類都繼承於models.model。當外鍵引用其他App中的類時,第一個參數格式爲:'app名.類名'
#coding=utf-8
from django.db import models
# Create your models here.
class OrderInfo(models.Model):
oid=models.CharField(max_length=20,primary_key=True)
ouser=models.ForeignKey('df_user.UserInfo',on_delete=models.CASCADE)
odate=models.DateTimeField(auto_now=True)
ototal=models.DecimalField(max_digits=6,decimal_places=2)
opay=models.BooleanField(default=False)
oaddress=models.CharField(max_length=150)
class DetailInfo(models.Model):
order=models.ForeignKey(OrderInfo,on_delete=models.CASCADE)
good=models.ForeignKey('df_goods.GoodsInfo',on_delete=models.CASCADE)
price=models.DecimalField(max_digits=5,decimal_places=2)
count=models.IntegerField()
創建好類後只要運行以下代碼就可以在數據庫中生成相應的表(當前App要先加入到INSTALLED_APPS中):
python manage.py make migrations
python manage.py migrate
其他:str方法,這是python的一個語法,在調用的時候返回指定信息,對用戶更加友好
class TypeInfo(models.Model):
ttitle=models.CharField(max_length=20)
isDelete=models.BooleanField(default=False)
def __str__(self):
return self.ttitle
#加個str方法是爲了在後臺管理頁面的時候可以顯示對象的具體信息,這裏顯示title,方便用戶
二、在admin中管理模型類
比如我們創建了2個類:商品種類(TypeInfo)和商品詳情(GoodsInfo),我們可以直接在admin的後臺管理中把商品一個個添加進去。
#coding=utf-8
from django.db import models
# Create your models here.
class TypeInfo(models.Model):
ttitle=models.CharField(max_length=20)
isDelete=models.BooleanField(default=False)
def __str__(self):
return self.ttitle
class GoodsInfo(models.Model):
gtitle=models.CharField(max_length=10)
gpic=models.ImageField(upload_to='df_goods')
gprice=models.DecimalField(max_digits=5,decimal_places=2)
isDelete=models.BooleanField(default=False)
gunit=models.CharField(max_length=20,default='500g')
gclick=models.IntegerField()
gbrief=models.CharField(max_length=100)
gstock=models.IntegerField()
gtype=models.ForeignKey(TypeInfo,on_delete=models.CASCADE)
def __str__(self):
return self.gtitle
1、先創建管理員帳戶,終端輸入以下命令:
python manage.py createsuperuser
2、在admin.py中添加需要管理的模型類:
from django.contrib import admin
from df_goods.models import TypeInfo,GoodsInfo #先引用
# Register your models here.
admin.site.register(TypeInfo) #註冊模型類
admin.site.register(GoodsInfo) #註冊模型類
3、運行服務, 然後登錄:http://127.0.0.1:8000/admin/,,出現如下登錄界面,輸入賬號密碼登錄
4、登錄成功後,可以看到我們添加模型類,點擊Add 、Change可以進行增加,修改。
三、對數據庫進行增刪改查
我們大部分的業務代碼都在views.py文件中,django提供了豐富的API來對數據庫進行操作。先引用我們要操作的模型類,常用命令如下:
from df_order.models import GoodsInfo,TypeInfo #先引用
查找:
goods=GoodsInfo.objects.all() #獲取所有對象
goods=GoodsInfo.objects.all()[:10] #切片,取前10個
goods=GoodsInfo.objects.get(pk=1) #查找單個,查找主鍵爲1的對象,如果沒有找到會報錯
goods=GoodsInfo.objects.filter(k1=v1,k2=v2...) #返回符合條件的對象列表
goods=GoodsInfo.objects.filter(gtitle__contains='abc') #查找gtitle包含'abc'的對象,兩個下劃線
goods=GoodsInfo.objects.all().order_by('-id') #根據id倒序排列,從大到小
type1=TypeInfo.filter(ttitle='新鮮水果')
goods=type1[0].goodsinfo_set.order_by('-id') #查找新鮮水果類型下的所有對象並根據id倒序。根據外鍵一查多,“對象.模型類_set”
刪除:
GoodsInfo.objects.filter(k1=v1).delete()
修改:
good=GoodsInfo.objects.filter(k1=v1)[0] #先找到
good.gtitle=xxx #修改
good.save() #保存
增加:
good=GoodsInfo()
good.gtitle=xxx
good.gprice=xxx
...
good.save() #保存
其他方法:
count():返回當前查詢的總條數
first():返回第一個對象
last():返回最後一個對象
exists():判斷查詢集中是否有數據,如果有則返回True
以上就是django模型類的一些基本操作,水平有限,如有問題望指正。
歡迎關注個人公衆號: