輕量級辦公平台開發實錄(10):日程管理模型設計
1、創建日程管理APP
使用pycharm打開項目文件,創建app:
startapp dailyreport
將新建的app拖到apps目錄下,修改settings配置文件,將新建的app添加到INSTALLED_APPS
INSTALLED_APPS = [
django.contrib.admin,
django.contrib.auth,
django.contrib.contenttypes,
django.contrib.sessions,
django.contrib.messages,
django.contrib.staticfiles,
system,
dailyreport,
]
2、創建日程管理模型
打開sandboxOA/apps/dailyreport/models.py文件,寫入如下內容:
from django.db import models
from django.contrib.auth import get_user_model
User = get_user_model()
class DailyReport(models.Model):
cat_choices = ((0, 工作報告), (1, 項目記錄), (2, 日程安排))
category = models.CharField(max_length=20, choices=cat_choices, default=0)
content = models.TextField(verbose_name=工作日報)
user = models.ForeignKey(User, related_name=report_user, on_delete=models.DO_NOTHING, default=)
attention = models.ManyToManyField(User, related_name=attention, blank=True)
start_time = models.DateTimeField(default=, verbose_name=開始時間)
end_time = models.DateTimeField(default=, verbose_name=結束時間)
add_time = models.DateField(auto_now_add=True, verbose_name="添加時間")
def __str__(self):
return self.category
class Meta:
verbose_name = 工作日報
verbose_name_plural = verbose_name
創建資料庫文件:選擇Tools → Run manage.py Task..., 運行如下命令
makemigrations dailyreport
migrate
欄位選項說明:
- related_name: 在django中可以給外鍵欄位設置related_name, 它的作用可以通過屬性值進行關係型數據的反向查詢,例如本次項目中我們想通過用戶張三 來查找他所有日程數據,查詢方法可以寫成:
from django.contrib.auth import get_user_model
User = get_user_model() # 使用自定義用戶認證模型
user = User.objects.get(name=張三)
report_all = user.dailyreport_set.all()
在本次項目DailyReport模型中,有兩個欄位是通過外鍵關聯到User的,如果使用上面的方法進行反向查詢,實際上是會報錯的,所以在實際項目中更多是使用related_name來進行反向查詢:
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(name=張三)
report_all = user.report_user.all()
同樣我們也可以查詢所有『張三』關注的日程:
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(name=張三)
report_all = user.attention.all()
- on_delete :在django2.0版本以前,定關聯欄位時,on_delete選項並不是必須的,而在django2.0版本後,在定義關聯欄位時on_delete是必須要定義的,常用參數如下:
on_delete=models.CASCADE, # 刪除關聯數據,與之關聯也刪除
on_delete=models.DO_NOTHING, # 刪除關聯數據,什麼也不做
on_delete=models.PROTECT, # 刪除關聯數據,引發錯誤ProtectedError
on_delete=models.SET_NULL, # 刪除關聯數據,與之關聯的值設置為null
on_delete=models.SET_DEFAULT, # 刪除關聯數據,與之關聯的值設置為默認值
需要注意的是在使用SET_NULL的時候,該欄位在模型定義的時候需要設置可為空,例如:
user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True)
同樣在使用SET_DEFAULT的時候,需要預先定義default:
user = models.ForeignKey(User, on_delete=models.SET_DEFAULT, default=默認值)
非常歡迎感興趣的朋友,到我的Github或知乎上做客,閑暇之餘給個贊或Star,贈人玫瑰手留余香^_^
知乎專欄SandBox:https://zhuanlan.zhihu.com/sandbox 輕量級辦公管理系統項目開源地址:https://github.com/RobbieHan/gistandard (乙方流程版)輕量級辦公管理系統:https://github.com/RobbieHan/sandboxOA (定製版,本記錄同步項目)
QQ技術交流區:83792608推薦閱讀:
TAG:Django(框架) | Python |