Domanda

Quindi, sto usando django.contrib.comments. Ho installato è OK, ma piuttosto che il modulo di commento predefinito ingombrante, mi piacerebbe utilizzare un modello di modulo personalizzato che mostra solo una textarea e pulsante di invio.

La logica alla base di questo è che l'utente vede solo la forma se zona già autenticati, e mi piacerebbe il mantenere la forma semplice e raccogliere il loro nome utente ecc automaticamente.

Ho implementato un modulo personalizzato, ma sto ottenendo un errore quando provo a presentarla.

Ecco quello che ho nel mio modello per la pagina con il modulo di commento (di iscrizione è l'oggetto passato dal punto di vista):

{% load comments %}
{% render_comment_form for entry %}

Ed ecco il mio HTML in /templates/comments/form.html:

{% if user.is_authenticated %}
    <p>Submit a comment:</p>
    <form action="/comments/post/" method="post">
    <textarea name="comment" id="id_comment" rows="2" style="width: 90%;"></textarea>
            <input type="hidden" name="options" value="{{ options }}" />
            <input type="hidden" name="target" value="{{ target }}" />
            <input type="hidden" name="gonzo" value="{{ hash }}" />
            <input type="hidden" name="next" value="{{ entry.get_absolute_url }}" /> 
             <span style="float:right;"><input type="submit" name="post" value="Add"></span>
    </form>
    {% else %}
        <p>Please <a href="/login/">log in</a> to post a comment.</p>
    {% endif %}

Si rende bene inizialmente, ma quando cerco di inviare il modulo di commento, ottengo il seguente errore Django:

Comment post not allowed (400)
Why:    Missing content_type or object_pk field.

Chiunque può aiutare?

È stato utile?

Soluzione 2

Risolto il problema copiando da app Theju - in particolare, si veda il commento Joshua Opere da parte 2

.

Altri suggerimenti

Il modello commento utilizza una chiave esterna generico per mappare l'oggetto per cui il commento è stato fatto ad esempio un blog. Questi sono necessari campi nascosti compresi nel modulo dei commenti standard.

Da django.contrib.comments.models

...
class CommentSecurityForm(forms.Form):
    """
    Handles the security aspects (anti-spoofing) for comment forms.
    """
    content_type  = forms.CharField(widget=forms.HiddenInput)
    object_pk     = forms.CharField(widget=forms.HiddenInput)
...

Se non è stata modificata la classe del form e solo voglia di cambiare il modello HTML, allora è possibile includere questi campi con l'aggiunta di un ciclo for su tutti i campi nascosti.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top