3

私はDjangoチュートリアルを行っています:https ://docs.djangoproject.com/en/dev/intro/tutorial01/

そして、manage.pyでPythonシェルを使用する例を見ています。コードスニペットはウェブサイトからコピーされます:

    # Give the Poll a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a poll's choices) which can be accessed via the API.
>>> p = Poll.objects.get(pk=1)

# Display any choices from the related object set -- none so far.
>>> p.choice_set.all()
[]

この例では、質問と回答の選択肢を含む投票モデルを使用しています。これは次のように定義されています。

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField()

オブジェクトchoice_setがどこから来たのかわかりません。質問については、「選択肢」のグループがあります。しかし、これはどこで明示的に定義されていますか?2つのクラスが定義されているようです。models.foreignKey(Poll)メソッドは2つのクラス(したがってテーブル)を接続しますか?ここで、接尾辞「_set」はchoice_setのどこから来ていますか。これは、PollテーブルとChoiceテーブルの間に1対多の関係を暗黙的に定義しているためですか。したがって、選択肢の「セット」があります。

4

3 に答える 3

4

choice_setChoiceからへの外部キーがあるため、DjangoORMによって自動的に配置されますPoll。これによりChoice、特定のPollオブジェクトのすべてを簡単に見つけることができます。

したがって、どこにも明示的に定義されていません。

related_nameパラメータを使用してフィールドの名前をに設定できますForeignKey

于 2013-01-23T15:35:32.673 に答える
2

この場合の関係_setコマンドchoice_setは、関係の API アクセサーです (つまり、ForeignKey、OneToOneField、または ManyToManyField)。

Django リレーションシップ、リレーションシップ API の詳細については、_set こちらをご覧ください。

于 2013-01-23T15:39:46.140 に答える
1

しかし、これはどこで明示的に定義されていますか?

そうではありません。これがジャンゴマジックです。

2つのクラスが定義されているようです。models.foreignKey(Poll) メソッドは 2 つのクラス (つまりテーブル) を接続しますか?

正しい。

接尾辞「_set」は、choice_set のどこから来ているのでしょうか。Poll テーブルと Choice テーブルの間に 1 対多の関係を暗黙的に定義しているため、選択肢の "セット" があるのでしょうか?

はい。これは単なるデフォルトです。通常のメカニズムで名前を明示的に設定できます。

于 2013-01-23T15:36:15.917 に答える