【问题标题】:PlaceholderAdmin throws <lambda>() takes exactly 1 argument (2 given)PlaceholderAdmin throws <lambda>() 只需要 1 个参数(给定 2 个)
【发布时间】:2011-03-16 13:28:36
【问题描述】:

我为 django-cms 编写了一个插件,它有自己的模型和一个 PlaceholderField。当我为模型管理员添加 PlaceholderAdmin 时,我在管理站点上得到了这个:

Exception Type: TemplateSyntaxError
Exception Value:    
Caught TypeError while rendering: <lambda>() takes exactly 1 argument (2 given)
Exception Location: <blablapath>/python2.6/site-packages/cms/forms/widgets.py in render, line 199

我一直在寻找解决方案,只发现 django-cms 示例存在一些问题,如果不取消注释 urls.py 中的某些路径就无法运行,所以我想这可能是 url 的问题,尤其是我在我的网址。问题是:django-cms url 的有效条件应该是什么?有任何想法吗?有什么解决办法吗?以前有人遇到过这个问题吗?

【问题讨论】:

  • 你不觉得展示你的领域的代码会有用吗?
  • 这就是问题所在。几乎没有什么要粘贴的,因为它非常简单 content_placeholder = PlaceholderField('simple_content_placeholder') 。这不是我的领域,而是 django-cms 领域。
  • 你曾经解决过这个问题吗?我也有同样的问题。

标签: django django-cms


【解决方案1】:

当您没有在管理类中子类化 PlaceholderAdminField 时会导致此问题。

例如:

from cms.admin.placeholderadmin import PlaceholderAdmin
from cms.models.fields import PlaceholderField

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    sidebar = PlaceholderField('sidebar')

class MyAdmin(PlaceholderAdmin):
    """ Put your usual admin stuff here. If you use fieldset,
    include the sidebar as its own tuple """
    fieldsets = (
        (None, {
            'fields': ('name',),
        }),

        ('Sidebar', {
            'classes': ('plugin-holder', 'plugin-holder-nopage'),
            'fields': ('sidebar',)
        }),
    )
admin.site.register(MyModel, MyAdmin)

【讨论】:

  • 这并没有太大帮助,但从那以后我意识到问题可能是因为我使用了multilingual-ng
  • 啊。我遇到了和你一样的错误,这是因为我没有在它的管理类中继承 PlaceholderAdmin。
  • 太多了!这为我解决了这个问题! :-D
【解决方案2】:

嗯,这似乎是 Django-CMS 中的一个错误。我从未使用过它,但查看代码,很明显PlaceholderField 的默认表单域创建了一个 lambda,它采用单个参数 - 一个查询集,但该表单域的渲染函数使用两个参数调用 lambda -请求和查询集。

解决此问题的最佳方法可能是定义您自己的 PlaceholderField 子类,它重新定义 formfield 方法,使其返回正确的 lambda:

class FixedPlaceholderField(PlaceholderField):
    def formfield(self, **kwargs):
        return self.formfield_for_admin(None, lambda request, qs: qs, **kwargs)

并在您的模型中使用此字段。

如果这能修复它,那么可能值得在 Django-CMS 中提出一个错误。

【讨论】:

  • 这就是我的想法,但它没有帮助,因为我遇到了其他错误,所以我认为它在我身边的某个地方。仍然这个 lambda 东西感觉很奇怪,所以无论如何我可能会将其报告为错误
【解决方案3】:

好的。我已经为我解决了这个问题。我仍然不知道发生了什么,但也许我的回答会帮助你弄清楚;)。 我用过一个方法:

def formfield_for_dbfield(self, db_field, **kwargs):
    ...

将一个文本字段替换为 TinyMCE 编辑器。当我删除整个方法时,问题就消失了。如果以后有时间,也许我会尝试更深入地研究它。 我仍然不相信这是唯一的问题。我有一种预感,它也可能与数据有关,因为我已经用代码中的文本插件填充了占位符。

希望它以某种方式有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2017-09-15
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2012-03-07
    相关资源
    最近更新 更多