13

私は Django でのコメント アプリの拡張に関するドキュメントを完全に理解しており、自動機能に固執したいと思っています...

現在のアプリでは、コメントとともに送信される「URL」はまったく役に立ちません。

デフォルトのセットアップを最小限に抑えて、このフィールドがコメント フォームに表示されないようにするにはどうすればよいですか?

Django 1、またはトランクを使用し、できるだけ多くのジェネリック/ビルトイン (ジェネリック ビュー、デフォルト コメントの設定など。これまでのところ、ジェネリック ビュー ラッパーは 1 つしかありません)。

4

3 に答える 3

17

SmileyChris さんの投稿になぜかコメントできないので、ここに投稿します。しかし、SmileyChris の応答だけを使用してエラーが発生しました。CommentForm は、削除した Post キーを探すため、get_comment_create_data 関数も上書きする必要があります。3 つのフィールドを削除した後のコードを次に示します。

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,
    )
于 2011-01-22T06:45:41.663 に答える
10

これは、コメントフレームワークのカスタマイズで十分に文書化されています。

アプリが使用するのは、URLフィールドがポップされたget_formのサブクラスを返すことだけです。CommentForm何かのようなもの:

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')
于 2009-09-21T21:27:43.877 に答える
5

私の手っ取り早い解決策: 「このフィールドは必須です」というエラーを取り除くために、任意の値で「email」フィールドと「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>
于 2011-04-03T23:43:36.667 に答える