最初のテストAPI(インタフェースデータベース操作CRUD)
今、私たちは、対話型のPythonコマンドラインを入力するには、次のコマンドを使用してPythonのコマンドラインを開いて、あなたのために作成されたAPIのジャンゴのさまざまな方法を試してください。
PY -3 Pythonのコマンドラインにmanage.pyシェル
D:\ジャンゴ\個人用サイト> PY -3 manage.pyシェル
Win32で:(ef4ec6ed12、2019年3月25日、22時22分05秒v3.7.3)MSC v.1916 64ビット(AMD64)]のPython 3.7.3
詳細については、タイプ「ヘルプ」、「著作権」、「クレジット」または「ライセンス」。
(にInteractiveConsole)
manage.pyセットはので、私たちは単に「パイソン」を使用する代わりに、このコマンドを使用しDJANGO_SETTINGS_MODULE個人用サイト/ settings.pyファイルに基づいて、ジャンゴのpythonインポートルートパケットに設定される環境変数を
我々は成功し、データベースのAPIを試して、コマンドラインを入力した場合:
コマンドラインの初期モデルクラスとクエリ:
#モデルクラスをインポート
>>> polls.modelsから選択、質問をインポートします
#クエリデータモデルクラス
>>> Question.objects.all()
<クエリセット[]>
質問#は、クラスオブジェクトを作成します。
デフォルトの設定ファイルのジャンゴ、タイムゾーン、タイムゾーンで#が活性化されています
#pub_dateフィールドは)ので(timezone.nowを使用する、こと時間の情報(tzinfoのを)ゾーンする必要はなく、
表示を容易#Datetiem.datetime.now()は、時間の時間帯に切り替えられます
>>> django.utils輸入のタイムゾーンから
>>> Q =問(QUESTION_TEXT = "何が新しいのか?"、PUB_DATE = timezone.now())
>>> q.save()
>>> q.id
1
>>> q.question_text
"新着情報?"
>>> q.pub_date
datetime.datetimeの(2019、10、4、10、4、45、113879、tzinfoの= <UTC>)
>>> q.pub_textは= "何かありましたの?"
>>> q.save()
>>> Question.objects.all()
<クエリセット[<質問:質問オブジェクト(1)>]>
>>>
<質問:Questionオブジェクト(1)>このオブジェクトの詳細についての我々の理解のためには役立ちません。この問題を解決するためのモデルコード(中世論調査/ models.py)を編集することによって、私たちに質問をしてみましょう。
増加する質問と選択肢__str __()メソッドを。
モデル__str __()メソッドへの追加
世論調査/ models.py:
django.db 輸入モデル #は、ここにあなたのモデルを作成します。 クラス質問(models.Model): QUESTION_TEXT = models.CharField(MAX_LENGTH = 200 ) PUB_DATE = models.DateTimeField(' 公表日' ) デフ__str __(自己): リターンself.question_textの クラスの選択(models.Model): 質問 =モデル.ForeignKey(質問、on_delete = models.CASCADE) choice_text = models.CharField(MAX_LENGTH = 200 ) の投票 = models.IntegerField(デフォルト= 0) デフ__str __(自己): リターンself.choice_text
()メソッドは、管理者Djangoが自動的に内部で生成されただけでなく、あなたのコマンドラインを使用するための利便性を与えるために、非常に重要であるにもこの方法を使用__strの__を高めるためにモデルオブジェクトを表します。
注:これらは、従来の方法パイソンある、のは、プレゼンテーションのカスタムメソッドを追加してみましょう。
django.db 輸入モデル から django.utils インポートタイムゾーン 輸入 日時 #がここにあなたのモデルを作成します。 クラス質問(models.Model): QUESTION_TEXT = models.CharField(MAX_LENGTH = 200 ) PUB_DATE = models.DateTimeField(' 公表日' ) デフ __str__ (自己): 戻りself.question_text デフ was_published_recently(自己): 戻りself.pub_date> = timezone.now() - datetime.timedelta(日= 1)
django.utilsから新たに追加されたインポート日時は、タイムゾーンをインポートし、標準django.utils.timezoneツールモジュールPythonのDjangoの日時モジュールと関連付けられたタイムゾーンに導入しました。
python経由してファイルを保存して、manage.pyシェル再びpythonのインタラクティブなコマンドラインコマンドを開くには:
クエリ再び
>>> polls.modelsから選択、質問をインポートします
質問すべてのオブジェクトクラスの#クエリ、__str __(参照)が動作しています
すべてのオブジェクト質問についてQuestion.objects.all()クエリ
>>> Question.objects.all()
<クエリセット[<質問:新機能>]>
1のQuestion.objects.filter(ID = 1)クエリID
>>> Question.objects.filter(ID = 1)
<クエリセット[<質問:新機能>]>
Question.objects.filter(question_text__startswithは=「何」)クエリのプレフィックスとは何ですか
フロント2つのアンダースコア#startswith
>>> Question.objects.filter(question_text__startswith = '何')
<クエリセット[<質問:新機能>]>
タイムゾーンを導入django.utilsインポートオブジェクトからタイムゾーン
>>> django.utils輸入のタイムゾーンから
>>> CURRENT_YEAR = timezone.now()。年
>>> CURRENT_YEAR
2019
Question.objects.get(pub_date__year = CURRENT_YEAR)
#検索今年の問題を公開
>>> Question.objects.get(pub_date__year = CURRENT_YEAR)
<質問:何が新しいのか?>
IDによってQuestion.objects.get(ID = 2)クエリ
#には、エラーを見つけていないだろう
>>> Question.objects.get(ID = 2)
トレースバック(最新の呼び出しの最後):
...
polls.models.Question.DoesNotExist:質問一致するクエリが存在しません。
ジャンゴ= 1つの略主キーのクエリ形式のPKを提供
Question.objects.get(PK = 1)
#
>>> Question.objects.get(PK = 1)
<質問:何が新しいのか?>
>>> Q = Question.objects.get(PK = 1)
q.was_published_recently()インスタンスメソッドを呼び出します
>>> q.was_published_recently()
真
q.choice_set.create()ターゲット・オブジェクト間の関係を疑問視するには、選択肢が追加されます
我々は、質問オブジェクトにいくつかの選択肢クラスの関係オブジェクトを追加しました。
この方法は、(作成q.choice_set.create)オブジェクトの選択の新しいインスタンスを構築し、操作は、文を挿入し、選択オブジェクトの利用できる選択肢の集合にインスタンスオブジェクトを追加し、オブジェクトの選択の新しいインスタンスを返します。
Djangoは、このような質問オブジェクトの他の側面との間の関係として「向こう側」のストレージ外部キー関係に集まり、オブジェクトのコレクションを作成します。選択肢(オプション)、その後、データベース操作のAPIへのアクセスを通じて、この関係を書くことができますオブジェクト
q.choice_set.all()、選択オプションの質問を見るchoice_setでクエリセットオブジェクトを返す、クエリが動作し続けることができるために
オブジェクト間の関係の先頭に#の選択肢は空です
>>> q.choice_set.all()
<クエリセット[]>
3つの選択肢リレーショナルオブジェクトを作成します。
>>> q.choice_set.create(choice_text = 'あまり'、投票= 0)
<選択肢:あまり>
>>> q.choice_set.create(choice_text = '空'、投票= 0)
<選択肢:空>
>>> C = q.choice_set.create(choice_text = 'だけで再びハッキング'、投票= 0)
c.questionビューの選択オブジェクトの質問オブジェクト間の関係
>>> c.question
<質問:何が新しいのか?>
#クエリは、再び選択リレーショナルオブジェクトのオブジェクトを問います
>>> q.choice_set.all()
<クエリセット[<選択肢:あまり>、<選択肢:空>、<選択肢:ちょうど再びハッキング>]>
オブジェクトの数との関係を表示するq.choice_set.count()
>>> q.choice_set.count()
3
あなたが必要とAPIが自動的にあなたが多くの層を持つことができますしたいどのように多くの層、の関係を分離するために二重のアンダースコアを使用して、関係を処理する、制限はありません
次の例では、すべての問題に対応するオプション(選択肢)を配置することである、のスクリーニングは今年の内のすべてのオブジェクトのリリース日であります
上記構成でCURRENT_YEAR変数を再利用
c.delete()オブジェクトを削除
Choice.objects.filter(question__pub_date__year = CURRENT_YEAR)
>>> Choice.objects.filter(question__pub_date__year = CURRENT_YEAR)
<クエリセット[<選択肢:あまり>、<選択肢:空>、<選択肢:ちょうど再びハッキング>]>
>>> C = q.choice_set.filter(choice_text__startswith = 'だけでハッキング')
>>> C
<クエリセット[<選択肢:ちょうど再びハッキング>]>
>>> c.delete()
(1、{ 'polls.Choice':1})
>>> C
<クエリセット[]>
>>> q.choice_set.all()
<クエリセット[<選択肢:あまり>、<選択肢:空>]>
>>> Choice.objects.all()
<クエリセット[<選択肢:あまり>、<選択肢:空>]>
>>>
timezone.now()
>>> timezone.now()
datetime.datetimeの(2019、10、5、2、20、10、762960、tzinfoの= <UTC>)
>>> TZ = timezone.now()
tz.year
>>> tz.year
2019
tz.month
>>> tz.month
10
tz.day
>>> tz.day
5
tz.hour
>>> tz.hour
2
tz.minute
>>> tz.minute
20
tz.second
>>> tz.second
22
tz.tzinfo
>>> tz.tzinfo
<UTC>