GenericForeinKey检索models.py

时间:2015-04-22 13:51:55

标签: django

我正在尝试从GenericForeignKey中检索字段,并且无法使其在model.py中运行 - 但它在admin.py中工作。

models.py:

class Run(models.Model):
    name = models.CharField(max_length=100)

class TaskRunRelation(models.Model):
    limit = models.Q(app_label = 'thisapp', model = 'run') | models.Q(app_label = 'thisapp', model = 'runb')
    content_type = models.ForeignKey(ContentType, limit_choices_to = limit)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

    def modeltestname(self):
        self.content_object.name

admin.py:

class TaskRelationAdmin(admin.ModelAdmin):
    list_display = ['modeltestname','mytestname']
    def mytestname(self,obj):
        return obj.content_object.name

因此mytestname在Admin中显示正确的值,而modeltestname显示“(None)”。为什么这不适用于model.py?我错过了Genericforeignkey的工作原理,还是其他任何错误?

1 个答案:

答案 0 :(得分:1)

这是因为你没有从std::map<int, std:string> tagMap = {{1, "data"},{2,"entry"},{3,"id"}} .... /* ORIGINAL for (auto& node: doca.child("data").children("entry")) { const char* id = node.child_value("id"); mapa[id] = node; } */ for (auto& node: doca.child(tagMap.find(1)).children(tagMap.find(2))) { const char* id = node.child_value(tagMap.find(3)); mapa[id] = node; } 返回任何内容。如果函数或方法没有明确返回任何内容,则默认情况下它将返回modeltestname。因此结果

所以将类方法更改为

None