1

我有两个模型:

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命名为secondhere。这是预期的行为吗?

ps
我使用的是 Django 1.5.1。

4

2 回答 2

1

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

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

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

于 2013-06-10T16:53:50.323 回答
1

A在后台GenericForeignKey使用两个字段;在这种情况下,它们是content_type并且object_id因为这些是默认名称second由on创建GenericRelationSecond.r

于 2013-06-10T16:50:35.230 回答