Domanda

Sono totalmente la comprensione della documentazione sull'espansione della Commenti applicazione in Django, e piacerebbe davvero restare con la funzionalità automatica di ma ...

In applicazione corrente, non ho assolutamente alcuna utilità per un "URL" da presentare insieme a un commento.

Essere minimamente invasiva di configurazione di default, come posso evitare che questo campo da presentarsi con il modulo di commento

Utilizzando Django 1, o del tronco, e come molti / built-in generico possibile (vista generici, i commenti di default impostati, ecc ho solo un unico punto di vista generico involucro finora).

È stato utile?

Soluzione

Questo è ben documentato sotto personalizzazione del quadro commenti .

Tutta la vostra applicazione utilizzerà è get_form, restituendo una sottoclasse della CommentForm con il campo URL spuntato. Qualcosa di simile:

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

Altri suggerimenti

Non posso commentare sul posto SmileyChris' per qualche ragione, in modo da sto andando a postare qui. Ma, mi sono imbattuto in errori che utilizzano solo la risposta SmileyChris'. È inoltre necessario sovrascrivere la funzione get_comment_create_data perché CommentForm è andare a cercare quelle chiavi sul post che è stato rimosso. Quindi, ecco il mio codice dopo ho rimosso tre campi.

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

Questa è la funzione che si sta sovrascrivendo

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

La mia soluzione rapida e sporca: ho fatto il la 'e-mail' e campi 'URL' campi nascosti, con un valore arbitrario di sbarazzarsi di errori 'Questo campo è obbligatorio'

.

Non è elegante, ma è veloce e non ho dovuto sottoclasse CommentForm. Tutto il lavoro di aggiungere commenti è stato fatto nel modello, che è bello. Ecco come si presenta (attenzione: non testato, in quanto si tratta di una versione semplificata del mio codice vero e proprio):

{% 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top