# Django 2.0 文章集 [4] 建立超級使用者
###### tags: `Django`, `django2.0`, `python`
## 建立超級使用者
e.g. "dada00321":"dada00321@gmail.com"
python manage.py createsuperuser
(鍵入上述指令後,一步步輸入即可建立 superuser)
## 進入管理後台
### 1) 運行 server
python manage.py runserver
python manage.py runserver 127.0.0.1:8001 --settings=mysite.settings
### 2) 瀏覽 "127.0.0.1:8001/admin/"
## 在管理後台添加模型
### => 編輯 blog/admin.py
### 加入下面 code:
```
from .models import Post
admin.site.register(Post)
```
### 存檔後 run server => 重新整理 browser
### 即可看到加入 Post 資料表後的管理後台
## 變更管理後台模型顯示方式
### => 編輯 blog/admin.py
### 刪除先前 code:
```
admin.site.register(Post)
```
### 加入下面 code:
```
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ("title", "slug", "author",
"publish", "status")
list_filter = ("status", "author", "publish", "created")
search_fields = ("title", "body")
prepopulated_fields = {"slug": ("title",)}
raw_id_fields = ("author",)
date_hierarchy = "publish"
ordering = ("status", "publish")
```
## QuerySet-資料庫中存值
### save() 會執行 SQL語法 UPDATE
### 對實際資料庫的欄位值或記錄做更新
python manage.py shell
> from django.contrib.auth.models import User
> from blog.models import Post
> user = User.objects.get(username="dada00321")
> post = Post(title="Second post",
slug="2nd-post",
body="I'm the 2nd post!",
author=user)
> post.save()
## QuerySet-資料庫中取值
python manage.py shell
> from blog.models import Post
> Post.objects.all()
### (過濾:給定條件) 使用 filter() 過濾取值
> Post.objects.filter(publish__year=2021)
> Post.objects.filter(publish__month=1)
> Post.objects.filter(publish__day=29)
### (過濾:排除條件) 使用 exclude() 過濾取值
> Post.objects.filter(publish__month=1).exclude(title__startswith="爬蟲")
### (過濾:排序) 使用 order_by() 過濾取值
> Post.objects.order_by("title") # ASC
> Post.objects.order_by("-title") # DESC
## QuerySet-刪除資料表中的記錄 (以 Post 資料表為例)
### P.S. 當記錄被刪除,該記錄的父資料表(ForeignKey對象) 與該記錄的相依關係(dependency) 也會被一併刪除。
### (前提是 ForeignKey對象 有設置 on_delete=CASCADE)
> Post.objects.get(id=1) # 先印出確認一下
> post = Post.objects.get(id=1) # 確認要刪除該筆記錄,儲存至 post 變數
> post.delete() # 執行刪除方法
## 建立模型管理器(類別)
### => 編輯 blog/models.py
#### 加入下面 code 以定義模型管理器:
```
class PublishedManager(models.Manager):
def get_queryset(self):
return super(PublishedManager,self)\
.get_queryset()\
.filter(status='draft')
```
#### 再加入下面 code 以設置模型管理器:
```
class Post(models.Model):
...
# 預設的模型管理器
objects = models.Manager()
# 自訂的模型管理器
published = PublishedManager()
```
## 利用模型管理器取值
python manage.py shell
> from blog.models import Post
> Post.published\
.filter(title__startswith="Second")