2009-09-21 20 views
12

estoy totalmente comprender la documentación en la ampliación de la aplicación Comentarios en Django, y realmente me gustaría seguir con la funcionalidad automática pero ...Comentarios de Django: desea eliminar la URL del usuario, no expandir el modelo. ¿Cómo?

En la aplicación actual, no tengo absolutamente ningún uso para un " URL "para enviar junto con un comentario.

Ser mínimamente invasiva de la configuración por defecto, ¿Cómo puedo evitar este campo de aparecer con el formulario de comentarios?

Utilizando Django 1, o Trunk, y tantos genéricos/incorporados como sea posible (vistas genéricas, configuración predeterminada de comentarios, etc. Hasta ahora solo tengo una sola envoltura de vista genérica).

Respuesta

9

Esto está bien documentado en customizing the comments framework.

Toda la aplicación que utilizará es get_form, devolviendo una subclase del CommentForm con el campo url reventado. Algo así como:

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

Acepto la documentación es grande, pero tengo que argumentar que encontrar mi camino a "base_fields" y usar. pop() no fue algo que encontré fácilmente. Sí, el marco de comentarios está bien documentado, pero "esto" no es así. Estoy de acuerdo en que es mi responsabilidad encontrar ese tipo de cosas, ¡y estoy muy agradecido por su tiempo y asistencia! ¡Gracias hermano! –

+0

Esto arroja errores en Django 1.4. También debe sobrescribir el método get_comment_create_data como se menciona en la solución de killerbarney. –

16

que no puedo comentar sobre el poste SmileyChris' por alguna razón, así que voy a publicar aquí. Pero me encontré con errores usando solo la respuesta de SmileyChris. También debe sobrescribir la función get_comment_create_data porque CommentForm buscará las claves Post que haya eliminado. Así que aquí está mi código después de eliminar tres campos.

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

Esta es la función que va a sobrescribir

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

Tendrá que estas declaraciones de importación: desde django.contrib.contenttypes.models importar ContentType de django.utils.encoding force_unicode importación de configuración de importación django.conf importación de fecha y hora – PhoebeB

+0

dependiendo del marco comentarios se extienda, 'django. contrib.comments' o 'django_comments' (considero que este último es más nuevo),' de django_comments.forms import Comment CommentForm' – jozxyqk

5

Mi solución rápida y sucia: Hice el del 'e-mail' y los campos 'URL' campos ocultos, con un valor arbitrario para deshacerse de errores 'este campo es obligatorio'.

No es elegante, pero es rápido y no tuve que subclasificar CommentForm. Todo el trabajo de agregar comentarios se hizo en la plantilla, lo cual es bueno. Parece que este (advertencia: no ensayado, ya que es una versión simplificada de mi código real):

{% 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> 
Cuestiones relacionadas