Django Использование GenericForeignKey для ссылки на модель - PullRequest
3 голосов
/ 22 февраля 2011

хорошо, поэтому моя база данных имеет структуру типа заголовки / строки, где есть модели заголовков, которые имеют много строк моделей. Эта структура присутствует на многих моделях. Я хочу отслеживать, какие модели заголовков связаны с какими моделями линий.

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

Итак, я использовал материал djangos GenericForeignKey и раньше, но только когда мне хотелось иметь отношения с внешним ключом для нескольких записей модели, а не только для самой модели.

С GenericForeignKey вам нужно три вещи:

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')

В моем случае мне не нужен object_id, но я не думаю, что могу это упустить ...

Так что после всего этого я предполагаю, что мой вопрос в том, является ли использование GenericForeignKey лучшим способом настройки этой модели, или есть какие-то другие решения.

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

надеюсь, что все имеет смысл. спасибо

1 Ответ

3 голосов
/ 22 февраля 2011

Поскольку вы просто хотите, чтобы он указывал на сами модели, а не на отдельные записи, все, что вам нужно, это

my_model = models.ForeignKey(ContentType)

Затем, если вы хотите выяснить, с какой моделью связан заголовок, просто наберите

>>> my_header.my_model
<ContentType: Model Name>

Если вы хотите указать на конкретные записи, вам нужны два других поля. Поле object_id содержит pk записи, на которую вы тоже указываете. И поле content_object НЕ хранится в базе данных, а является просто хорошей оболочкой, которая (используя поля object_id и content_type) возвращает объект модели, а не вам приходится искать запись вручную на основе типа содержимого и идентификатора .

...