TIL#123 Django study(1)


テーブルをadminサイトに反映

bookmark/admin.py

from django.contrib import admin
from bookmark.models import Bookmark

@admin.register(Bookmark)
class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'url')
BookmarkAdminクラスは、BookmarkクラスがAdminサイトでどのように出力されるかを定義するクラスです.@admin.register()レコーダを使用して住民サイトにログインします.レコーダの代わりにregister()関数を用いて記述してもよい.
bookmark/admin.py

from django.contrib import admin
from bookmark.models import Bookmark

class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'url')

admin.site.register(Bookrmark, BookmarkAdmin)

サイト名タグの管理


runserverの後に実行されるadminサイトにログインすると、ライブラリでデフォルトで提供されているuser、groupテーブルのほかに新しく追加されたbookmarkテーブルが表示されます.bookmarkテーブルの横にあるaddボタンをクリックしてモデルを作成します.pyで定義したテーブルの様子が表示されます.
  • アプリケーション名:左側のBOOKMARK.startapppnameコマンドで使用するappname大文字
  • 表名:左側BOOKMARKより下のBookmarks.オブジェクト名に複数の名前接尾辞を追加し、最初の文字を大文字で表示します.verbose name plural metaオプション
  • に変更できます.
  • 対象名:中上のAdd bookmark.models.pyで定義したモデルクラス名を小文字とスペースに変更します.verbose name metaオプション
  • として指定できます.

    generic view - ListView, DetailView

    bookmark/views.py
    
    from django.views.generic import ListView, DetailView
    from bookmark.models import Bookmark
    
    class BookmarkListView(ListView):
        model = Bookmark
        
    class BookmarkDetailView(DetailView):
        model = Bookmark
  • ListView
    これはレコードリストのビューを表示するためです.ListViewを継承する場合は,オブジェクトを含むリストを整理し,コンテキスト変数としてテンプレートシステムに渡すだけでよい.これらのリストをテーブル内のすべてのレコードにインポートして整理する場合は、テーブル名、すなわちモデルクラス名を指定するだけです.
    明示的に指定されていなくても、倉庫でデフォルト値として指定できる2つのプロパティがあります.1つ目はコンテキスト変数としてobject_listを使用し、2つ目はテンプレートファイル名を모델명 소문자_list.htmlフォーマットに指定する名前です.テンプレートファイル名はdispatterbookmark/bookmark_list.htmlです.
  • DetailView
    これは、特定のレコードの詳細を示すためのビューです.DetailViewを継承する場合は、特定のオブジェクトをコンテキスト変数に入れてテンプレートシステムに渡すだけです.テーブルからpkで特定のオブジェクトをクエリーしてインポートする場合は、テーブル名、すなわちモデルクラス名を指定するだけです.クエリーで使用するpk値は、URLConfからビューに抽出されたパラメータを使用します.
    明示的に指定されていなくても、倉庫でデフォルト値として指定できる2つのプロパティがあります.1つ目はコンテキスト変数としてobjectを使用し、2つ目は모델명 소문자_detail.htmlフォーマットを使用したテンプレートファイル名です.テンプレートファイル名はdispatterbookmark/bookmark_detail.htmlです.テーブルクエリ条件で使用されるpk値はURLConfによって渡され、その処理はDetailView Genericビューによって自己処理されます.
  • templates - str()

    bookmark/models.py
    
    class Bookmark(models.Model):
        title = models.CharField('Title', max_length=100, blank=True)
        url = models.URLField('URL', unique=True)
    
        def __str__(self):
            return self.title
    
    
    bookmark/templates/bookmark/bookmark_list.html
    
    ...
    <div id="content">
        <h1>Bookmark List</h1>
        <ul>
            {% for bookmark in object_list %}
                <li><a href="{% url 'detail' bookmark.id %}">{{ bookmark }}</a></li>
            {% endfor %}
        </ul>
    </div>
    ...
  • {{bookmark}}テンプレート変数は、Bookmarkテーブルの特定のレコードを表します.このオブジェクトを印刷すると、そのオブジェクトの__str__()メソッドが呼び出され、結果が出力されます.上のコードに従って、オブジェクトのtitleを出力します.
  • SlugField

    blog/models.py
    
    class Post(models.Model):
       ...
       slug = models.SlugField('SLUG', unique=True, allow_unicode=True, help_text='one word for title alias.')
       ...
  • allow_unicode:オプションを追加すると、韓国語処理
  • help_text:この列を説明するフォーム画面に表示されます.adminサイトで表示可能
  • Slug
    ページや文章を説明するコア単語の集合です.もともと新聞や雑誌にタイトルを書くときに、重要な意味を含む単語だけを使ってタイトルを書く方法です.Web開発分野では、コンテンツの固有のアドレスとして使用されており、コンテンツのアドレスが何であるかを簡単に理解することができます.
    通常、太字はページや文章タイトルの助詞、前置詞、カンマ、句点などの代わりにハイフネーション(-)を使用し、URLに使用されます.ブックマークをURLに使用することで、検索エンジンでページをより速く検索でき、検索エンジンの精度が向上します.
    URLではpkがよく使われています.pkを使うと、数字しかないので内容を推測するのは難しいですが、slugを使うと、普通の単語なので分かりやすいです.
    SlugFieldのポーリング長は50で、このフィールドはポーリングインデックスを生成します.
  • adminクラスの定義

    blog/admin.py
    
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
        list_display = ('id', 'title', 'modify_dt')
        list_filter = ('-modify_dt', )
        search_fields = ('title', 'content')
        prepopulated_fields = {'slug': ('title', )}
  • list display:id、title、modify dt指定画面
  • list filter:modify dt列を使用したフィルタのエッジバーを表示することを指定します
  • search fields:検索ボックスを表示し、入力した単語をtitleとcontentバーで検索
  • プリフィルfield:ドラッグアンドドロップフィールドタイトルフィールドを使用してプリフィル