Frage

verstehe ich völlig in die Dokumentation auf die Kommentare App in Django erweitert, und möchte wirklich mit der automatischen Funktionalität halten und ...

In der aktuellen App, ich habe absolut keine Verwendung für eine „URL“ zusammen mit einem Kommentar eingereicht werden.

Das minimalinvasive der Standardeinstellung, wie kann ich dieses Feld verhindern, zeigt mit dem Kommentar-Formular oben

Mit Django 1 oder Stamm, und so viele generic / Einbauten wie möglich (allgemeine Ansichten, Standard Kommentare einrichten, usw. Ich habe nur ein einziger allgemeine Ansicht Wrapper bisher).

War es hilfreich?

Lösung

Das ist gut dokumentiert, unter Customizing der Kommentare Rahmen .

Alle Ihre App verwenden ist get_form, eine Unterklasse der CommentForm mit dem URL-Feld knallte zurück. So etwas wie:

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

Andere Tipps

kann ich nicht auf SmileyChris Kommentar post aus irgendeinem Grund, so werde ich es hier posten. Aber, lief ich Fehler in nur Antwort SmileyChris verwenden. Sie müssen auch die get_comment_create_data Funktion überschreiben, weil Kommentarformular für die Pfosten Schlüssel aussehen wird, die Sie entfernt. Also hier ist mein Code, nachdem ich drei Felder entfernt.

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

Dies ist die Funktion, die Sie überschreiben

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

Meine quick and dirty Lösung: Ich habe die die ‚email‘ und ‚url‘ Felder versteckte Felder, mit einem beliebigen Wert loszuwerden ‚dieses Feld ist erforderlich‘ Fehler

.

Es ist nicht elegant, aber es ist schnell und ich muss Kommentarformular nicht Unterklasse. Alle Arbeiten von Hinzufügen von Kommentaren in der Vorlage gemacht, das ist schön. Es sieht aus wie dieser (Achtung: nicht getestet, da es sich um eine vereinfachte Version meiner eigentlichen Code ist):

{% 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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top