2016-10-17 2 views
3

Если предположить следующую структуру класса в Джанго:Создать новый производный объект из существующего базового объекта (не получено)

class Base(models.Model) 
class Derived(Base) 

И этот базовый объект (, который только Base, не производной)

b = Base() 
b.save() 

Я хотел бы создать производный объект из b. Какой был бы правильный способ сделать это? Я пробовал:

d = Derived(b) 
d = Derived(base_ptr=b) 

Благодарности

Примечание: Я думаю, это другой вопрос, чем как то, что мне нужно «Как перейти от модели базы для производного класса в Django?» для создания нового производного объекта из существующего базового (и только базового) объекта. В этом вопросе он проверяет, существует ли уже производный класс и затем возвращает его. В моем случае производный объект не существует.

+1

HTTPS: //docs.djangoproject.com/en/1.10/topics/db/models/#abstract-base-classes? –

+0

Мой базовый класс не абстрактный. Это наследование нескольких таблиц. После создания базового объекта мне нужно преобразовать его в производный класс, это на уровне БД, чтобы иметь запись в производной таблице, связанную с базовой таблицей. – klautern

+0

Я нашел связанный с этим вопрос http://stackoverflow.com/questions/9821935/django-model-inheritance-create-a-subclass-using-existing-super-class – klautern

ответ

1

Я думаю, что нашел решение. Второй attemp я пытался была проблема она сброшена все поля базового объекта:

d = Derived(base_ptr=b) 
d.save() # Resets all base fields of d 

Как сказано в Django model inheritance: create sub-instance of existing instance (downcast)?, это может решить проблему, хотя это не самое элегантное решение:

d = Derived(base_ptr=b) 
d.__dict__.update(b.__dict__) 
d.save() 
Смежные вопросы