2009-09-21 35 views
12

我完全理解在Django的扩大应用注释的文档,真正想坚持使用自动功能 ...Django评论:想要删除用户的URL,而不是扩大模型。如何?

在当前的应用程序,我绝对没有使用一个“ URL“与评论一起提交。

作为默认设置的微创我怎么能阻止这个领域进行展示与评论表单吗?

使用Django 1,或树干,和许多普通/内置插件越好(一般的看法,默认设置注释了,等我只有一个通用视图包装至今)。

回答

9

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') 
+7

我同意的文件是伟大的,但我不得不认为,找到我的方式“base_fields”和使用。 pop()不是我随便碰到的东西。是的,评论框架是有据可查的,但“这个”不是。我同意我有责任去找到这样的事情,我非常感谢您的时间和帮助!多谢兄弟! – 2009-09-22 01:01:21

+0

这会在Django 1.4中引发错误。您还需要覆盖killerbarney解决方案中提到的get_comment_create_data方法。 – 2013-02-14 00:37:10

16

我不能到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, 
    ) 
+5

你需要这些import语句:从django.contrib.contenttypes.models进口的ContentType 从django.conf导入设置 进口日期时间 – PhoebeB 2011-07-26 12:50:10

+0

根据意见框架django.utils.encoding进口force_unicode 正在扩展,'Django的。 contrib.comments'或'django_comments'(I收集后者是较新的),'从django_comments.forms导入CommentForm' – jozxyqk 2014-09-02 14:35:08

5

我的快速和肮脏的解决方案的功能:我做了“电子邮件”和“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>