Django筆記二:模型類的基本操作

前言:上一篇文章講了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模型類的一些基本操作,水平有限,如有問題望指正。

 

                                                  歡迎關注個人公衆號:

                                                           

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章