Django models.Model 类成员未出现在 model_instance._meta.fields 中

发布于 2024-09-06 18:48:13 字数 387 浏览 2 评论 0原文

我有一个 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. 

有人可以告诉我为什么吗?

谢谢 !

I have a django.contrib.contenttypes.generic.genericForeignKeyField as a member of my model,

however, it is not appearing when I instantiate the model and then try to get the fields out of the _meta of the object.

e.g:

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

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

Can someone please tell me why ?

Thanks !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城之時有危險 2024-09-13 18:48:13

您没有正确设置通用关系。阅读文档

设置 GenericForeignKey 分为三个部分:

  1. 为您的模型提供 ContentTypeForeignKey
  2. 为您的模型提供一个字段,该字段可以存储您将关联的模型的主键值。 (对于大多数模型,这意味着 IntegerFieldPositiveIntegerField。)
    该字段必须与泛型关系中涉及的模型的主键具有相同的类型。例如,如果您使用 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')

Your are not setting up the generic relation correctly. Read the documentation:

There are three parts to setting up a GenericForeignKey:

  1. Give your model a ForeignKey to ContentType.
  2. Give your model a field that can store a primary-key value from the models you'll be relating to. (For most models, this means an IntegerField or PositiveIntegerField.)
    This field must be of the same type as the primary key of the models that will be involved in the generic relation. For example, if you use IntegerField, you won't be able to form a generic relation with a model that uses a CharField as a primary key.
  3. Give your model a GenericForeignKey, and pass it the names of the two fields described above. If these fields are named "content_type" and "object_id", you can omit this -- those are the default field names GenericForeignKey will look for.

In the end, it must be something like:

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
放我走吧 2024-09-13 18:48:13

你为什么会期望它呢?这不是一个真正的领域。它是使用模型上的(真实)content_typeobject_id 字段计算的虚拟字段。

不过,您可以在 a._meta.virtual_fields 中看到它。

Why would you expect it to? It's not a real field. It's a virtual field that's calculated using the (real) content_type and object_id fields on the model.

You can however see it in a._meta.virtual_fields.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文