#python #django
#python #django
Вопрос:
Допустим, у меня есть модель с именем foo:
class Foo(models.Model):
col_one = models.SomeFiled(...)
col_two = models.SomeFiled(...)
Теперь я знаю, что col_one и col_two будут представлять столбцы в базе данных, но если я добавлю метод init() в модель следующим образом:
class Foo(models.Model):
col_one = models.SomeFiled(...)
col_two = models.SomeFiled(...)
def __init__(self):
attr_one=value_one
Теперь каждый экземпляр Foo будет представлять запись в базе данных, но то, что attr_one будет представлять для этой конкретной записи, похоже на метаданные, связанные с этой записью? будет ли он сохранен в базе данных при первом создании объекта?
Я новичок как в Python, так и в Django, если мой вопрос тривиален.
Комментарии:
1. Я думаю, вам нужно немного перефразировать. Неясно, в чем на самом деле заключается ваш вопрос. Возможно, вам также следует добавить пример. И, пожалуйста, переместите часть с «я новичок как в python, так и в Django, если мой вопрос тривиален.» в его собственное предложение или удалите его полностью.
2.
attr_one
будет доступен только в методе init . Если вы намеревались использоватьself.attr_one
, он будет там до тех пор, пока экземпляр не будет собран мусором. Он нигде не сохраняется в базе данных, если это то, что вы спрашиваете.
Ответ №1:
В вашем конкретном случае attr_one — это локальная переменная, как и в любой функции python, которая исчезает после завершения выполнения функции.
Если, с другой стороны, вы имели в виду self.attr_one=...
, то это был бы атрибут экземпляра класса, который был бы потерян после уничтожения объекта. То есть он создается только при вызове этой функции, он доступен и определен до тех пор, пока используется тот же экземпляр объекта python, но большинство из вас извлекает тот же объект из базы данных с нуля.
Все, что сказано, я бы не стал переопределять __init__
метод модели django. Особенно не обойтись без вызова super(). Это будет препятствовать основной функциональности django и, вероятно, вызывать ошибки.