Django models.Модель класса не отображается в model_instance._meta.fields - PullRequest
1 голос
/ 22 июня 2010

У меня есть django.contrib.contenttypes.generic.genericForeignKeyField в качестве члена моей модели,

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

Например:

class A(models.Model):
    field2 = models.IntegerField(...)
    field1 = generic.genericForeignKeyField()

a = A()
a._meta.fields   ---> this does not show field1, but shows field2. 

Может кто-нибудь сказать, пожалуйста, почему?

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 июня 2010

С чего бы это ожидать? Это не настоящее поле. Это виртуальное поле, которое рассчитывается с использованием (реальных) полей content_type и object_id в модели.

Однако вы можете увидеть это в a._meta.virtual_fields.

1 голос
/ 22 июня 2010

Вы неправильно настраиваете родовое отношение.Прочитайте документацию :

. Настройка GenericForeignKey состоит из трех частей:

  1. Присвойте вашей модели ForeignKey ContentType.
  2. Дайте вашей модели поле, в котором можно сохранить значение первичного ключа из моделей, к которым вы будете относиться.(Для большинства моделей это означает IntegerField или PositiveIntegerField.)
    Это поле должно быть того же типа, что и первичный ключ моделей, которые будут включены в родовое отношение.Например, если вы используете IntegerField, вы не сможете сформировать общее отношение с моделью, которая использует CharField в качестве первичного ключа.
  3. Дайте вашей модели GenericForeignKey и передайте ей именаиз двух полей, описанных выше.Если эти поля названы «content_type» и «object_id», вы можете опустить это - это имена полей по умолчанию, которые будет искать GenericForeignKey.

В конце концов, оно должнобыть что-то вроде:

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...