_meta.get_all_field_names()中的GenericForeignKey名称错误

时间:2013-06-10 16:44:38

标签: python django

我有两种模式:

class First(models.Model):
    name = models.CharField(max_length=50, default='n/a')
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()


    def __unicode__(self):
        return str(self.pk) + ' > ' + self.name


class Second(models.Model):
    name = models.CharField(max_length=50, default='n/a')
    r = generic.GenericRelation(First)

    def __unicode__(self):
        return str(self.pk) + ' > ' + self.name

当我这样做时:

from myapp.models import First
First._meta.get_all_field_names()

我明白了:

['content_type', u'id', 'name', 'object_id', 'second']

所以在这里似乎不是content_objectGenericForeignKey而是second。这是预期的行为吗?

ps
我正在使用Django 1.5.1。

2 个答案:

答案 0 :(得分:1)

GenericForeignKey在幕后使用两个字段;在这种情况下,自those are the default names以来,它们是content_typeobject_idsecond Second.r {{1}} {{1}}。

答案 1 :(得分:1)

https://django-model-internals-reference.readthedocs.org/en/latest/get_all_field_names.html

  

get_all_field_names
  返回所有字段名称的列表   该模型可能(包括反向关系名称)。这是   用于漂亮的打印调试输出(选项列表),所以任何   仅包含内部字段名称。

在这种情况下,反向关系名称为second。是的,预期的行为。