2009-09-21 3 views
12

verstehe ich völlig in die Dokumentation auf die Kommentare App in Django erweitert, und möchte wirklich mit der automatischen Funktionalität für ein aber ...Django Kommentare: Möchten Sie die Benutzer-URL entfernen, erweitern Sie das Modell nicht. Wie man?

In der aktuellen App, ich habe absolut keinen Gebrauch bleiben " URL "zusammen mit einem Kommentar eingereicht werden.

Als minimalinvasive des Standard-Setup, wie kann ich verhindern, dass dieses Feld von mit dem Kommentar-Formular angezeigt?

Verwenden von Django 1, oder Trunk, und so viele generische/eingebaute wie möglich (generische Ansichten, Standard-Kommentare eingerichtet, etc. Ich habe bisher nur eine einzige generische Ansicht Wrapper).

Antwort

9

Dies ist unter customizing the comments framework gut dokumentiert.

Alle Ihre App verwenden wird get_form, eine Unterklasse der CommentForm mit dem URL-Feld zurückgegeben zurückgegeben. 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') 
+7

Ich stimme der Dokumentation ist sehr gut, aber ich habe zu argumentieren, dass auf „base_fields“ meinen Weg zu finden und verwenden. Pop() war nicht etwas, das ich gerne gesehen habe. Ja, der Kommentarrahmen ist gut dokumentiert, aber "das" nicht. Ich stimme zu, dass es meine Verantwortung ist, solche Dinge zu finden, und ich bin sehr dankbar für Ihre Zeit und Unterstützung! Dank bro! –

+0

Dies wirft Fehler in Django 1.4. Sie müssen auch die Methode get_comment_create_data überschreiben, wie in der Lösung von Killerbarney erwähnt. –

16

Ich kann den Beitrag von SmileyChris aus irgendeinem Grund nicht kommentieren, also werde ich es hier posten. Aber ich habe Fehler mit nur SmileyChris 'Antwort bekommen. Sie müssen auch die Funktion get_comment_create_data überschreiben, da CommentForm nach den gesperrten Post-Schlüsseln sucht. Also hier ist mein Code, nachdem ich drei Felder entfernt habe.

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

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

Sie werden diese Import-Anweisungen benötigen: von django.contrib.contenttypes.models Content importieren von django.utils.encoding Import force_unicode von django.conf Importeinstellungen import datetime – PhoebeB

+0

auf den Kommentaren Rahmen Je erweitert, 'django. contrib.comments' oder 'django_comments' (ich nehme an, letzteres ist neuer),' from django_comments.forms import CommentForm' – jozxyqk

5

Meine quick and dirty Lösung überschreiben: I mit einem beliebigen Wert der die E-Mail-'und ‚url‘ Felder versteckte Felder, gemacht loswerden von 'dieses Feld ist erforderlich' Fehler.

Es ist nicht elegant, aber es ist schnell und ich musste nicht CommentForm subclass. Die ganze Arbeit beim Hinzufügen von Kommentaren wurde in der Vorlage erledigt, was nett ist. 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="[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> 
Verwandte Themen