Почему не возникает никаких ошибок?
На Model
вы можете определить ноль или более полей, которые имеют эквивалент в базе данных, но помимо этого вы также можете добавить ноль или более функций, свойств, атрибутов и т. Д. В модель.
Вы, наверное, уже как-то это сделали. Например:
class Symbol(models.Model):
market = models.CharField(
max_length=20,
null=True,
blank=True,
)
def __init__(self, *args, **kwargs):
super(Symbol, self).__init__(*args, **kwargs)
<b>self.cache = {}</b>
<b>@property
def market3(self):
return self.market and self.market[:3]</b>
После того, как все эти модели на самом деле являются объектами Python, с некоторой магией, такой, что если вы измените атрибут и появится поле с тем же именем, то оно будет соответствовать этому полю. Но обычно модели также имеют некоторую дополнительную логику и атрибуты, чтобы сделать их более интеллектуальными, обрабатывать части запроса на уровне модели, вычислять свойства, которые зависят от одного или нескольких полей и т. Д.
Письмо:
<b>s.i_dont_know = 1</b>
Вы прикрепили атрибут к s
объекту с именем 'i_dont_know'
и значением 1
. Однако обратите внимание, что этот атрибут не постоянный: если вы сохраните объект, а затем перезагрузите его из базы данных, то все дополнительные данные, которые вы к нему прикрепили, исчезнут. Если, конечно, вы не определите сеттер, который добавляет дополнительную логику.