我有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.
有人可以告诉我为什么吗?
谢谢 !
最佳答案
您没有正确建立通用关系。阅读documentation:
设置GenericForeignKey分为三个部分:
给您的模型ForeignKey
到ContentType
。
给您的模型一个字段,该字段可以存储您将要关联的模型中的主键值。 (对于大多数型号,这表示IntegerField
或PositiveIntegerField
。)
该字段的类型必须与将在通用关系中涉及的模型的主键相同。例如,如果您使用IntegerField,将无法与使用CharField作为主键的模型形成通用关系。
给您的模型一个GenericForeignKey
,并为其传递上述两个字段的名称。如果这些字段分别命名为“ content_type”和“ object_id”,则可以忽略这些-这些是GenericForeignKey
将查找的默认字段名称。
最后,它必须类似于:
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
关于python - Django models.Model类成员未出现在model_instance._meta.fields中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3096040/