【问题标题】:UUIDField from django-extensions is not available in Class Based Views来自 django-extensions 的 UUIDField 在基于类的视图中不可用
【发布时间】:2014-01-20 21:01:14
【问题描述】:

我有一个使用几个 UUIDField 的 Web 应用程序。在 Admin UI、基于函数的视图和其他 Python 代码中,这些字段按预期工作。但是,当尝试在 CBV 的“字段”中列出它们时,我收到错误:

FieldError(message) django.core.exceptions.FieldError: Unknown field(s) (ct_id) 

这里的主题字段是ct_id。但是另一个人也这样做。

来自models.py:

ct_id = UUIDField(_("UUID"), version=4, help_text=_('A unique identifier for this PCT.'))

如上所述,它们在管理员列表中工作:

    list_display = ('data_name','prj_name','published','ct_id')
admin.site.register(DvBoolean, DvBooleanAdmin)

在基于函数的视图中为 DynaTree 创建 JSON:

pct_json['tooltip'] = 'ct-'+pct.ct_id + " : " +pct.description

但在 CBV 中,这会引发错误:

fields =['published','prj_name','data_name','ct_id',]

关于如何完成这项工作的任何想法?我只想渲染它们以供显示,而不是用于编辑。

谢谢

【问题讨论】:

  • 可能是你忘了把ct_id 写成'ct_id'

标签: python django django-views django-extensions


【解决方案1】:

这可能是个愚蠢的问题,但是您是否尝试过将ct_id 放在引号中?

fields = [
    'published',
    'prj_name',
    'data_name', 
    'ct_id',
]

【讨论】:

  • 在实际代码中,它正确地包含了引号。事实上,我只是仔细检查了一下,然后解决了这个问题。 :-)
【解决方案2】:

我不确定这是解决问题的唯一方法还是最佳方法。但是,因为无论如何我都需要在视图中使用 get_context_data() 。我现在这样做是为了让 ct_id 进入视图模板:

def get_context_data(self,**kwargs):
    context = super(DvStringUpdateView, self).get_context_data(**kwargs)
    semlinks = []
    obj = get_object_or_404(DvString,pk=context['object'].id)
    if obj.resource_uri:
        urilist = obj.resource_uri.splitlines()
        attrlist = obj.sem_attr.splitlines()        
        for n in range(0,len(urilist)):
            semlinks.append(attrlist[n] + ' = ' + unquote(urilist[n]))

    context['semlinks'] = semlinks
    context['ct_id'] = obj.ct_id
    return context

UUIDField 的定义方式是否存在错误,导致它在 CBV 中不可用?这至少是一种解决方法。

【讨论】:

    猜你喜欢
    • 2012-02-05
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多