2015-07-10 4 views
-1

У меня есть:Модели наследования в Django

class User(models.Model): 
    name = models.CharField() 

class Worker(User): 
    role = models.CharField() 

Я импортировал все пользователи из унаследованной базы данных. И я могу, очевидно, сделать:

bob = User.objects.get(name='bob') 

который возвращает bob экземпляр.

Но теперь мне нужно создать экземпляр Worker, который наследуется от bob? Я сначала подумал об этом:

MyWorker = Worker.objects.create(
    pk = bob.pk, 
    role = 'chief') 

который возвращает новый экземпляр рабочего, но не коррелировала с пользователем Bob, как я хотел. Как я могу создать этот экземпляр Worker на основе экземпляра bob?

+1

Экземпляры не наследуются от экземпляров - классы наследуются от классов. Чего вы на самом деле пытаетесь достичь? – jonrsharpe

+0

Пытаются создать копию 'bob', но как экземпляр' B'? Я не уверен, что вы действительно хотите. Не могли бы вы представить фактический пример того, чего вы хотите достичь, и почему вы думаете, что это способ сделать это? – IanAuld

+0

@jonrsharpe Вы правы. В этом конкретном случае (перенос данных) мне нужен экземпляр для наследования из другого экземпляра. Вот почему это не работает. –

ответ

0

Вот правильный и полный способ решить эту проблему. Наследование нескольких таблиц - это просто отношение OneToOneField между пользователем и рабочим, это точка get here.

Для создания подкласса работник из экземпляра пользователя, вы должны сделать это:

user = User.objects.get(name='bob') 

worker = Worker(user_ptr=user, role='chief') 
worker.__dict__.update(user.__dict__) 
worker.save() 

Важным моментом здесь является обновление ДИКТ между обоими экземплярами.

Этот вопрос может быть дублирован, но для получения полного ответа вам нужно искать в комментариях. Трюк с обновлением dict - большая часть решения.

Смежные вопросы