2013-10-07 5 views
0

есть проект, в котором models.py выглядит следующим образом:Модели Django. Получить класс модели

class Page(models.Model) 
    #fields 

class News(Page) 
    #no fields 

Когда я хочу, чтобы извлечь на News страницу Page или я что-то вроде этого:

page = get_object_or_404(Page, id=page_id)

Однако, когда я даю это: page.__class__ Я всегда получаю это: main.models.Page.

Есть ли способ узнать, если страница фактически Page класс или класс News без проверки, если page_id существует в News?

ответ

1

Учитывая только значение page_id нет никакого способа, чтобы проверить, существует ли или нет, что значение идентификатора в качестве записи в News таблице в дополнение к Page таблице другой может чем пытаться извлечь его (например, с page.news и поймать исключение DoesNotExist для случаев, в которых он не существует) или прямой запрос к диспетчеру News. Запросы от менеджера модели Page вернут Page экземпляров - вам нужно либо знать априорно, что вы хотите, чтобы вы использовали News, либо проверяли на существование.

-1

Вы посмотрите на isinstance

page = get_object_or_404(Page, id=page_id)  
isinstance(page, News): 
+0

Это никогда не вернет «Истину». 'get_object_or_404' вернет экземпляр класса, который вы ему даете, если он возвращает что-либо, а не создает исключение. –

+0

Да, я сначала не понял этот вопрос и понял, что это не сработает, потому что вы возвращаете экземпляр объекта Page – Charl

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