我完全理解在Django的扩大应用注释的文档,真正想坚持使用自动功能但 ...Django评论:想要删除用户的URL,而不是扩大模型。如何?
在当前的应用程序,我绝对没有使用一个“ URL“与评论一起提交。
作为默认设置的微创,我怎么能阻止这个领域进行展示与评论表单吗?
使用Django 1,或树干,和许多普通/内置插件越好(一般的看法,默认设置注释了,等我只有一个通用视图包装至今)。
我完全理解在Django的扩大应用注释的文档,真正想坚持使用自动功能但 ...Django评论:想要删除用户的URL,而不是扩大模型。如何?
在当前的应用程序,我绝对没有使用一个“ URL“与评论一起提交。
作为默认设置的微创,我怎么能阻止这个领域进行展示与评论表单吗?
使用Django 1,或树干,和许多普通/内置插件越好(一般的看法,默认设置注释了,等我只有一个通用视图包装至今)。
这customizing the comments framework下有据可查。
您的所有应用程序将使用的是get_form
,返回CommentForm
的子类,并弹出url字段。喜欢的东西:
class NoURLCommentForm(CommentForm):
"""
A comment form which matches the default djanago.contrib.comments one, but
doesn't have a URL field.
"""
NoURLCommentForm.base_fields.pop('url')
我不能到SmileyChris'后由于某种原因发表评论,所以我将它张贴在这里。但是,我只用SmileyChris的回答就遇到了错误。您还必须覆盖get_comment_create_data函数,因为CommentForm将查找您删除的那些Post键。所以这是我删除三个字段后的代码。
class SlimCommentForm(CommentForm):
"""
A comment form which matches the default djanago.contrib.comments one, but with 3 removed fields
"""
def get_comment_create_data(self):
# Use the data of the superclass, and remove extra fields
return dict(
content_type = ContentType.objects.get_for_model(self.target_object),
object_pk = force_unicode(self.target_object._get_pk_val()),
comment = self.cleaned_data["comment"],
submit_date = datetime.datetime.now(),
site_id = settings.SITE_ID,
is_public = True,
is_removed = False,
)
SlimCommentForm.base_fields.pop('url')
SlimCommentForm.base_fields.pop('email')
SlimCommentForm.base_fields.pop('name')
这是将要覆盖
def get_comment_create_data(self):
"""
Returns the dict of data to be used to create a comment. Subclasses in
custom comment apps that override get_comment_model can override this
method to add extra fields onto a custom comment model.
"""
return dict(
content_type = ContentType.objects.get_for_model(self.target_object),
object_pk = force_unicode(self.target_object._get_pk_val()),
user_name = self.cleaned_data["name"],
user_email = self.cleaned_data["email"],
user_url = self.cleaned_data["url"],
comment = self.cleaned_data["comment"],
submit_date = datetime.datetime.now(),
site_id = settings.SITE_ID,
is_public = True,
is_removed = False,
)
我的快速和肮脏的解决方案的功能:我做了“电子邮件”和“URL”字段隐藏字段,为任意值摆脱'这个字段是必需的'错误。
这不是优雅,但它的快速和我没有子类CommentForm。所有添加评论的工作都是在模板中完成的,这很好。它看起来像这样(警告:没有测试,因为这是我的实际代码的简化版本):
{% get_comment_form for entry as form %}
<form action="{% comment_form_target %}" method="post"> {% csrf_token %}
{% for field in form %}
{% if field.name != 'email' and field.name != 'url' %}
<p> {{field.label}} {{field}} </p>
{% endif %}
{% endfor %}
<input type="hidden" name="email" value="[email protected]" />
<input type="hidden" name="url" value="http://www.foofoo.com" />
<input type="hidden" name="next" value='{{BASE_URL}}thanks_for_your_comment/' />
<input type="submit" name="post" class="submit-post" value="Post">
</form>
我同意的文件是伟大的,但我不得不认为,找到我的方式“base_fields”和使用。 pop()不是我随便碰到的东西。是的,评论框架是有据可查的,但“这个”不是。我同意我有责任去找到这样的事情,我非常感谢您的时间和帮助!多谢兄弟! – 2009-09-22 01:01:21
这会在Django 1.4中引发错误。您还需要覆盖killerbarney解决方案中提到的get_comment_create_data方法。 – 2013-02-14 00:37:10