添加前缀do Django评论表单

时间:2010-04-07 11:05:04

标签: django django-forms

我想为每个django评论表单添加一个前缀。我在同一页面中使用多个注释表单并且它的工作正常,我不喜欢有许多具有相同id属性的输入字段,如<input type="text" name="honeypot" id="id_honeypot" />

那么,有没有办法告诉django为每个表单实例添加前缀?我知道当我以这种方式newform = CustomForm(prefix="a")创建表单实例时,我可以使用其他表单,但是使用Django的注释系统,这部分由注释模板标记{% get_comment_form for [object] as [varname] %}处理。

我可以告诉模板标签添加前缀吗?

1 个答案:

答案 0 :(得分:2)

好吧,我有个主意。添加custom comments form并覆盖__init__。您可以从target_object生成前缀并将其设置为self.prefix

def __init__(self, target_object, data=None, initial=None):
    ...

或者更好,覆盖BaseForm.add_prefix:

def add_prefix(self, field_name):
    """
    Returns the field name with a prefix appended, if this Form has a
    prefix set.

    Subclasses may wish to override.
    """
    return self.prefix and ('%s-%s' % (self.prefix, field_name)) or field_name

<强>更新 你是对的。前缀不起作用,主要原因是contrib.comments.views.comments.post_comment中的代码。所以我重新阅读了您的问题,如果您只需要更改“id”属性,请使用BaseForm.auto_id:

class CustomCommentForm(CommentForm):
    def __init__(self, target_object, data=None, initial=None):
        super(CustomCommentForm, self).__init__(target_object, data, initial)
        idprefix = target_object.__class__.__name__.lower()
        self.auto_id = idprefix + "_%s"