J'essaie de créer un champ de formulaire de notation en utilisant le code jquery here Jusqu'à présent, je l'ai bien fonctionner, mais ce que je dois faire est de passer dans une URL basée sur l'objet que je suis essayant de noter. Voir la ligne $.post("URL TO GO HERE", {rating: value}, function(db)
est le code ci-dessous. L'URL serait quelque chose comme /rating/object_id
où object_id serait le pk de l'objet que je veux évaluer. Quel est le meilleur moyen de transmettre un identifiant d'objet pour pouvoir l'utiliser. Aurais-je besoin de le passer d'abord à RatingField, puis de le transmettre à StarWidget?Django - Passer l'objet dans le champ de formulaire personnalisé
class StarWidget(widgets.Select):
"""
widget to show stars which the user can click on to rate
"""
class Media:
css = {
'all': ('css/ui.stars.css',)
}
js = ('js/ui.stars.js',)
def render(self, name, value, attrs=None):
output = super(StarWidget, self).render(name, value, attrs)
jquery = u"""
<div id="stars-rating" class="rating_section">
%s
<span id="caption"></span>
</div>
<script type="text/javascript">
$(function(){
$("#stars-rating").stars({
inputType: "select",
captionEl: $("#caption"),
cancelShow: false,
callback: function(ui, type, value)
{
// Hide Stars while AJAX connection is active
$("#stars-rating").hide();
$("#loader").show();
$.post("URL TO GO HERE", {rating: value}, function(db)
{
$("#loader").hide();
$("#stars-rating").show();
}, "json");
}
});
});
</script>
""" % (output)
return mark_safe(jquery)
class RatingField(forms.ChoiceField):
"""
rating field. changes the widget and sets the choices based on the model
"""
widget = StarWidget
def __init__(self, *args, **kwargs):
super(RatingField, self).__init__(*args, **kwargs)
self.label = "Rating:"
self.initial = 3
self.choices = Rating.RATING_CHOICES
Merci pour la réponse. Pouvez-vous me donner un exemple de comment faire cela? – John
Je ne sais pas exactement comment je peux créer un fragment de gabarit séparé rendu par la méthode de rendu du champ. Je sais comment créer le fragment mais je ne sais pas comment le rendre rendu par la fonction de rendu du widget. – John
@John: voir la section 'Rendu d'un template' dans le livre de Django: http://www.djangobook.com/en/beta/chapter04/ –