Давайте возьмем учебник по Django.В первой части мы можем найти эту модель:
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
, с помощью которой Django генерирует следующий SQL:
CREATE TABLE "polls_poll" (
"id" serial NOT NULL PRIMARY KEY,
"question" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
);
Можно заметить, что Django автоматически добавил AutoField
, славно названныйid
, который похож на IntegerField
в том, что он обрабатывает целые числа.
В части 3 мы создаем пользовательское представление, доступное через следующий шаблон URL:
(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'),
Учебное пособие объясняет, что последующий HTTP-запрос приведет к следующему вызову:
detail(request=<HttpRequest object>, poll_id='23')
Несколько прокручиваний позже, мы можем найти этот фрагмент:
def detail(request, poll_id):
try:
p = Poll.objects.get(pk=poll_id)
Обратите внимание, как хвост URLКомпонент становится аргументом poll_id со значением string , равным '23'
, которое успешно обработано методом Manager
(и, следовательно, QuerySet
) get
для получения результата запроса SQL, содержащего WHERE
предложение с целым числом значением 23
определенно выглядит так:
SELECT * FROM polls_poll WHERE id=23
Конечно, Django выполнил преобразование из того факта, что поле id
является AutoField
один.Вопрос как и когда .В частности, я хочу знать, какие внутренние методы вызываются и в каком порядке (вроде , что документ объясняет для проверки формы ).
Примечание: я взглянул на источники в django.db.models
и нашел несколько *prep*
методов, но не знаю ни когда и где они вызываются, не говоря уже о том, являются ли они тем, кем я являюсьищу.
PS: я знаю, что это не кастинг stricto sensu , но я думаю, вы поняли.