Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Django - получить модель ContentType по имени модели (общие отношения)

Автор вопроса: Uriel BertocheОтветов: 1

Я думаю об этом какое-то время,

Я создаю приложение чата, в chat.models указан класс Room, однако Room может быть связан с чем угодно в моем проекте, поскольку он использует общее отношение в своем внешнем ключе.

Есть ли способ узнать, к какой модели относится эта комната, зная только название модели?

Нравиться:

ctype = 'user'

related_to_user = Room.objects.filter(content_type=ctype)

У меня проблема в том, что приведенный ниже код находится в представлении:

doc = get_object_or_404(Document, id=id)
# get *or create* a chat room attached to this document
room = Room.objects.get_or_create(doc)

Если я не хочу использовать модель документа, если я хочу, чтобы модель была связана со строкой, строкой, которая может быть чем угодно, без необходимости писать тонны if, чтобы получить конкретную модель для конкретной строки. Есть ли способ найти модель только по ее имени?

Спасибо

pythondjangocontent-type

Ответы

Ответ 1 · рейтинг 48 · Yuji 'Tomita' Tomita

http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#methods-on-contenttype-instances

user_type = ContentType.objects.get(app_label="auth", model="user")
user_type = ContentType.objects.get(model="user")
# but this can throw an error if you have 2 models with the same name.

Очень похоже на get_model Джанго

from django.db.models import get_model
user_model = get_model('auth', 'user')

Чтобы точно использовать ваш пример:

ctype = ContentType.objects.get(model='user')
related_to_user = Room.objects.filter(content_type=ctype)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы