Django 4


dir vs vars


dir


dirにアクセスするには、pipenv shellを使用して仮想環境にアクセスし、python manage.py shellを入力してshellにアクセスします.

次にUserというクラスをインポートします
データベースからobjectsをインポートする方法たとえば、2人のユーザーをどのようにインポートしますか?
入力dir(User)です.

dirはクラスの名前のリストを返します.
入力vars(User)です.

varsは、__dict__、dictionary、またはクラスリストの表示を返します.ユーザークラスはAbstractUserを継承し、AbstractBasicUserを使用し、モデルを使用するため、managerを含む直接作成されていないコンテンツをインポートできます.

Managers


managerデータベースから要素をインポートできます.sqlを使用せずにPythonを使用してインポートできます.これは長い間強力な機能の一つです.
データモデルを作成すると、障害database-abstraction APIが自動的に提供されます.このAPIでは、オブジェクト(CRUD)を作成、検索、更新、削除できます.

QuerySet

QuerySetは、データベースからのスマートオブジェクトのリストです.

すべてのプレイヤーをインポート

User.objects.all()

#<QuerySet [<User>: David_Kim, <User>:Tanon_Kim] >

上記のコードを入力すると、QuerySetが返されます.
all_user = User.objects.all()
all_user.filter(superhost=True)

#<QuerySet [<User>: tanonkim] >
上のコードのようにfilter、exclude、コメントを掛けて、すべての内容を表示できます.
ユーザーのtanonkimを取得します.

SET


さらに表示するには、dir(David_Kim)を入力します.次は結果です.

message_set, room_set, review_set..... userはsetで何をしますか...?
roomを作成すると、このroomにはForeignキーがあるため、hostがあります.ユーザー向けの部屋にもアクセスできます.setを利用することです!
これは、「入る」パネルに部屋情報はないものの、コードにも情報が入っているためです.要素に外部キーを割り当てると、その要素は外部キーにもアクセスできます.related_name!
class Room(core_models.TimeStampedModel):
    amenities = models.ManyToManyField("Amenity", related_name="rooms", blank=True)
    facilities = models.ManyToManyField("Facility", related_name="rooms", blank=True)
    houserules = models.ManyToManyField("HouseRule", related_name="rooms", blank=True)
もう1つの例は、qというQuestionモデル(1)にAnswerモデル(N)というForeignKey接続がある.
aでQuestionを取得したい場合は、簡単に入手できます.
a.question
Answerモデルオブジェクトとしてのaはquestion属性を持つため,aによる問題の検索は非常に容易である.では、逆に、質問で答えを見つけることができますか?Questionモデルには応答属性がなく,不可能かもしれないが,実際には可能である.answer_set.
q.answer_set.all()
QuestionモデルやAnswerモデルなどの相互に関連付けられている場合は、接続モデル名setと同じ方法で関連付けられたデータを問い合わせることができます.

RECAP


1) related_name by ManyToOnerelated nameによってuser(1)の立場からroom(N)を検索することもできる.
room modelsでは、関連するnameを使用してuserからroomを逆参照できます.
migrateを忘れないで!
2)ManyToMany,OneToOneの関係はroomである.amenities.all()のようにそのまま持って来ればいい!
3) query_set managerマネージャからall()、filter()、count()を使用できます.