Slide 31
Slide 31 text
Как создается экземпляр модели
Препарируем Django:
Модели
Заглянем в метод __init__, класса Model
def __init__(self, *args, **kwargs):
fields_iter = iter(self._meta.fields)
...
if not kwargs:
for val, field in izip(args, fields_iter):
setattr(self, field.attname, val)
else:
for val, field in izip(args, fields_iter):
setattr(self, field.attname, val)
kwargs.pop(field.name, None)
if isinstance(field.rel, ManyToOneRel):
kwargs.pop(field.attname, None)
MyModel(field1=1, field2="text")
Этот код ищет в self._meta.fields поля field1 и field2, и
устанавливает экземпляру аттрибуты
self.field1 = 1
self.field2 = "text"