2012-06-04 2 views
0

У меня есть базовая модель и один, который наследует от него, сходный по установке для этого:Как выбрать базовый класс от дочернего объекта в Django (используя модель наследования)

class Archive(models.Model): 
    pub_date = models.DateField() 


class ArchiveB(Archive): 
    another_date = models.DateField() 

Как получить доступ базовый класс из дочернего класса? Например:

archiveb_instance = ArchiveB.objects.get(pk=5) 
base_instance = archiveb_instance.archive #This doesn't work. 

Согласно документации его просто отношения один-к-одному автоматически создается в ребенке, так что я решил, что это позволит мне идти в обратном направлении. Причина, по которой я хочу это, состоит в том, что у меня есть третья не-архивная модель, в которой есть архив Foreign Archive. Я хочу, чтобы файл foreignkey был Archive, потому что эта третья модель может относиться к любому Архиву, а не только к определенному типу Archive.

ответ

1

я думаю, что вы могли бы искать archiveb_instance.archive_ptr

0

Они имеют один и тот же PK, поэтому просто назначьте это поле с добавленным _id.

+0

выше ответ был правильным решением для меня. Только для того, чтобы отметить, я не думаю, что они обязательно используют один и тот же PK (т. Е. Если я создал несколько архивных записей, которые не включают записи ArchiveB, а затем создают кучу записей ArchiveB). В этом случае PK для двух таблиц не совпадет. – rsp

+0

Да, они будут. PK базы - это то, что содержит элемент OneToOneField. –