2015-09-11 3 views
0

У меня есть абстрактный BaseModel, из которых многие модели наследуют поведение для инициализации значений атрибутов из конструктора:Установки атрибутов в конструкторе для модели Django

class BaseModel(models.Model): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     for key in kwargs: 
      setattr(self, key, kwargs[key]) 

    class Meta: 
     abstract = True 

Затем я пытаюсь инициализировать один из его специализации, как это :

BaseModelSon(attr1=val1, attr2=val2, ...) 

Это хорошая практика? Вы знаете какой-либо другой способ достижения этой динамической инициализации для моделей Django?

ответ

2

Вы уже можете создавать регулярные экземпляры модели Django с

MyModel(field1='value1', field2='value2') 

, так что я не думаю, что ваш метод __init__ необходимо.

+0

У меня плохое предположение, что у django этого не было – gerosalesc

1

Кроме того, вы, вероятно, найти полезную Model.objects.create() метода для создания нового модели экземпляров Джанго:

instance = MyModel.objects.create(field1='value1', field2='value2'...) 

Если есть некоторые автоматически генерируемые поля (например, идентификатор или некоторая дата с auto_now_add=True вариантом) - вы» Получите их значения в instance, если вы использовали Model.objects.create().