# 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")