Как Django моделирует полевую работу?

Они определены так:

#define CODENAME_ONE_THREAD_STATE struct ThreadLocalData* threadStateData

#define CN1_THREAD_STATE_SINGLE_ARG CODENAME_ONE_THREAD_STATE
#define CN1_THREAD_STATE_MULTI_ARG CODENAME_ONE_THREAD_STATE,
#define CN1_THREAD_STATE_PASS_ARG threadStateData,
#define CN1_THREAD_STATE_PASS_SINGLE_ARG threadStateData
#define CN1_THREAD_GET_STATE_PASS_ARG getThreadLocalData(),
#define CN1_THREAD_GET_STATE_PASS_SINGLE_ARG getThreadLocalData()

Так что вам нужно использовать CN1_THREAD_GET_STATE_PASS_SINGLE_ARG. Я не уверен, почему это не сработает в том же файле. Может произойти сбой, как только вы исправите этот вызов.

10
задан Carl Meyer 5 June 2015 в 22:10
поделиться

2 ответа

Да, first_name и last_name являются переменными класса. Они определяют поля, которые будут созданы в таблице базы данных. Существует таблица Person, которая имеет first_name и last_name столбцы, таким образом, имеет смысл для них быть на уровне Класса в этой точке.

Для больше на моделях, см.: http://docs.djangoproject.com/en/dev/topics/db/models/

Когда дело доходит до доступа к экземплярам Человека в коде Вы обычно делаете это через ORM Django, и в этой точке они по существу ведут себя как переменные экземпляра.

Для больше на образцовых экземплярах, см.: http://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs

4
ответ дан 3 December 2019 в 16:31
поделиться

Сущность Вашего вопроса, "каким образом эти переменные класса (которому я присваиваю Объекты поля) внезапно становятся переменными экземпляра (который я присваиваю данным) в ORM Django"? Ответ на это является волшебством метаклассов Python.

Метакласс позволяет Вам сцепляться в и изменять процесс создания класса Python (не создание экземпляра того класса, создание самого класса).

Объект модели Django (и таким образом также Ваши модели, которые являются подклассами) имеет метакласс ModelBase. Это просматривает все атрибуты класса Вашей модели и любого, которые являются экземплярами Поля, разделяют его на подклассы перемещения в полевой список. Тот список назначен атрибутом _meta объект, который является атрибутом класса модели. Таким образом можно всегда добираться до фактических Объектов поля через MyModel._meta.fields, или MyModel._meta.get_field('field_name').

Model.__init__ метод затем может использовать _meta.fields список для определения, какие атрибуты экземпляра должны быть инициализированы, когда образцовый экземпляр создается.

Не бойтесь погрузиться в исходный код Django; это - большой источник образования!

21
ответ дан 3 December 2019 в 16:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: