Personalizzazione django-comments
-
16-09-2019 - |
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?
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 %}