Что атрибут экземпляра будет представлять в базе данных? для модели Django

#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 и, вероятно, вызывать ошибки.