我有两种模式:
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_object
,GenericForeignKey
而是second
。这是预期的行为吗?
ps
我正在使用Django 1.5.1。
答案 0 :(得分:1)
GenericForeignKey
在幕后使用两个字段;在这种情况下,自those are the default names以来,它们是content_type
和object_id
。 second
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
。是的,预期的行为。