檢視 Django Unleashed筆記/第三章 的原始碼
←
Django Unleashed筆記/第三章
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
{{Nav|程式語言、邏輯學|Django Unleashed筆記}} ; Django Model 和 SQLite 資料庫 * MVC 理論 * 自動生成 SQLite 的資料 * 關聯式資料庫 * persistency -> 狀態的資料和無狀態的程式 * Ch 30 講到 PostgreSQL * Entity 是表格 (table)。 * pk = primary key:主鍵 * foreign key:外鍵 * unique identifier:單一識別子 * Django 中,我們只需要關注抽像關係和模型 * slug:儲存資料的字串 (unique) eg. "The quick brown fox" -> "the-quick-brown-fox" ** 用 slug 比較好 ** 不應該區分大小寫 ** 不是 identifier 的全部 * 使用 model ** myblog/organizer/model.py <pre> from django.db import models # Create your models here. class Post(models.Model): # varchar title = models.CharField(max_length=63, #最大文字數 unique = true, #是否唯一 help_text = 'help of title of the document', verbose_name = "post's title" # 複雜文字 ) # 參數 db_index:被自動索引 slug = models.SlugField(max_length=100, unique_for_month='pub_date') # unique_for_month # 指確保同一月份不會強碰 text = models.TextField() # text pub_date = Models.DateField() # date startup = models.ForeignKey(Startup) # foreign key tags = models.ManyToManyField(Tag) # many-to-many relationship 多對多關係,建議放在持有attribute的欄位 # 其他還有 URLField, Emailfield 等 </pre> * <code>ManyToManyField(related_name = 'blog_posts')</code> # 使 startups 反向存取blog.posts <pre> class Tags(Models.model): class Meta: ordering=['name'] #以name 遞增排序,['-name'] 表示遞減排序 get_latest_by = ['founded_date'] # 取最後一個的取出依據 verbose_name_plural = "ponies" # 複數呈現法 </pre> * 假設在表單呈現時,DisplayModel 通常被轉換為 display model。 * Django 的處理方式: ** 檢查 model -> 產生 migration file -> 產生 database ** 適宜多人分工 * {{code|./manage.py check}} # 檢查模型 * {{code|./manage.py makemigrations organizer}} # 生成 migration 檔 ** {{code|./manage.py makemigrations organizer}} ** migrations/0001_initial.py 等等是 migration 檔 *** {{code|./manage.py sqlmigrate blog 0001}} # 產生對應的 sql 檔 * {{code|./manage.py migrate}} # migrate : ORM 操作 * {{code|./manage.py shell}} #進入 shell * {{code|from myblog.models import Tag, ...}} # 匯入 class(表格) * {{code|<nowiki>example = Tag('name='Education', slug='education')</nowiki>}} # 建立新列(資料) * {{code|example.save()}} # 儲存列 * {{code|example.delete()}} # 刪除列 :: manager:通常為 Tag.objects這樣的形式,型別為{{code|django.db.models.manager.Manager}},綁在Tag 等「class 名稱」中。 * {{code|<nowiki>Tag.objects.create(name='xxx', slug='yyy')</nowiki>}} # 創建新物件 * {{code|<nowiki>Tag.objects.bulk_create([Tag(name='xxx', slug='yyy'), Tag(name='zzz', slug='aaa')])</nowiki>}} #創建多個物件 * {{code|Tag.objects.all()}}#顯示列表 *{{code|Tag.objects.count()}}#顯示總數 *{{code|<nowiki>Tag.objects.get(slug='xxx')</nowiki>}}#得到特定條件的資料 *{{code|<nowiki>Tag.objects.get(slug__iexact='xxx')</nowiki>}}#得到特定條件的資料,大小寫不區分 *{{code|<nowiki>Tag.objects.get(slug__istartswith='xxx')</nowiki>}}#以xxx開頭的資料 *{{code|<nowiki>Tag.objects.get(slug__contains='xxx')</nowiki>}}#包含xxx的資料 *{{code|Tag.objects.get}}最多只能得到1個資料,多個資料要用{{code|<nowiki>Tag.objects.filter(slug__contains='yyy')</nowiki>}} *{{code|<nowiki>Tag.objects.filter(slug__contains='yyy').order_by('-name')</nowiki>}} #排序 *{{code|<nowiki>Tag.objects.values_list()</nowiki>}} #產出[(3, 'xxx', 'yyy'),...]的各物件列表 *{{code|<nowiki>Tag.objects.values_list('name', 'slug')</nowiki>}} #產出[('xxx', 'yyy'),...]的各物件列表,指定屬性 *{{code|<nowiki>Tag.objects.values_list('name', flat=True)</nowiki>}} #產出字串的queryset *記得保存新生的row *{{code|djt.tags.add(data)}} #加入資料
返回到「
Django Unleashed筆記/第三章
」。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
愛爾蘭語辭典
近期變更
隨機頁面
有關 MediaWiki 的說明
相關網站
總首頁
Blog
舊 blog
現用 blog 備份
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊