Django的评论:要删除用户的URL,而不是扩大模型。 如何?(Django Comments

2019-07-18 20:07发布

我完全理解在Django的扩大应用注释的文档,真正想坚持使用自动功能,但 ...

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

作为微创默认设置的, 我怎么能阻止这一领域的显示与评论的形式

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

Answer 1:

这是在有据可查的定制意见的框架 。

您所有的应用程序将使用的是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')


Answer 2:

我不能到SmileyChris'后由于某种原因发表评论,所以我将它张贴在这里。 但是,我遇到了只用SmileyChris'响应错误。 您也可以覆盖get_comment_create_data功能,因为CommentForm是要去找你删除这些帖子键。 因此,这里是我的代码后,我取出三个字段。

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,
    )


Answer 3:

我的快速和肮脏的解决方案:我做了“电子邮件”和“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="foo@foo.foo" />
    <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>


文章来源: Django Comments: Want to remove user URL, not expand the model. How to?