Meilleures pratiques: Comment implémenter au mieux les notes de classement dans les modèles Django [fermé]

StackOverflow https://stackoverflow.com/questions/1649632

  •  22-07-2019
  •  | 
  •  

Question

Je voudrais avoir des évaluations réutilisables (présentation typique avec 5 étoiles). J'ai trouvé ce http://www.thebroth.com/blog/111/css -rating-stars qui explique comment afficher cela en utilisant css. Pour collecter la note, je pensais utiliser une carte graphique ou peut-être de simples boutons radio. Je souhaite l’utiliser sur différents modèles.

Comment feriez-vous cela? Dois-je créer un widget ou puis-je le faire avec un modèle? En fait, j’ai été assez surpris de ne rien trouver à ce sujet sur le Web. Est-ce aussi simple ou inhabituel?

Était-ce utile?

La solution

Si vous avez reçu des réponses intéressantes sur la liste de diffusion django-users :

par Mike:

  

Eh bien, vous pouvez créer un widget, j'aime moi-même un modèle d'évaluation distinct. Cette   recueille la valeur et ajoute ensuite cela à un total et crée un score ou   moyenne. Le modèle stocke le nombre total de votes et le score total, que je divise   et obtenir ma moyenne, (je fais le calcul dans la vue). L'ajouter à d'autres modèles   avec une relation de clé étrangère. Faire en sorte que les utilisateurs ne votent qu'une seule fois est rarement   appliquée en dehors de la session en cours ou de la durée de vie du cookie. Si vous le voulez   persistance, je ne suis pas sûr que ce qui est le mieux pour   cela, mais ne nécessiterait que le vote des utilisateurs enregistrés.   Maintenant, vous venez d'afficher le formulaire d'évaluation, je le ferais comme une inclusion de modèle   tag et mettre le tag dans mes modèles. Cette balise a le formulaire de base de soumission, le   forme elle-même est deux champs, avec une zone de sélection (je suis allé simple de cette façon) et un   champ caché étiqueté ensuite qui pointe vers cette page, que je peux rediriger   à. Lorsque l'utilisateur soumet, dans mes vues pour gérer l'action de formulaire, je viens   incrémenter les votes et le score total et rediriger vers la page du vote   pris sur. C’est en utilisant le bouton de soumission traditionnel, en postant le formulaire à un   URL, retournant une vue complète.   Si vous faites quelque chose avec JavaScript qui illumine le nombre d'étoiles pour   la note et cliquez sur les étoiles pour soumettre, ici, vous voudrez peut-être poster comme   objet json utilisant la requête xhr, met à jour la vue et renvoie un objet json avec   les valeurs d'évaluation mises à jour, s'il s'agit d'un 200, met à jour la page avec les nouvelles valeurs   après avoir voté (est retourné avec les 200). Si c'est un 500, traitez l'erreur,   informant l'utilisateur qu'il y avait un problème de vote et de réinitialiser les étoiles.   C’est ce que je fais ou ferais dans votre position, si quelqu'un a une meilleure idée,   parlez s'il vous plaît.   J'espère que cela t'aides.   Mike

par Ethan:

  

En fait, je viens de faire 5 étoiles pour un projet sur lequel je travaille, et   été en train de comprendre si j'ai quelque chose de réutilisable qui vaille la peine d'être publié en tant que   paquet (et en essayant de trouver le temps de comprendre cela ..), je vais décrire   ce que j'ai fait et ce que je faisais.   J'ai utilisé django-ratings [1,2] pour le backend et connecté son RatingField à   mes modèles notables.   J'aime jQuery, donc pour l'interface j'ai utilisé le plugin jquery-star-rating [3,4]   comme base. Il transforme une collection de boutons radio en un widget étoile. je   n'ont pas examiné de près la mise en œuvre, mais je pense qu'il est fondamentalement   en utilisant la même technique CSS décrite dans votre lien. Pour commencer vous   Il suffit d’inclure ses fichiers JS et CSS et d’ajouter class = " star " à la radio   boutons dans votre formulaire.   Je viens alors d'écrire un code de vue qui envoie les données de la demande à la radio   boutons pour django-ratings. Trucs super simples, juste utilisé les évaluations de Django   L'API RatingManager et géré les exceptions qu'elle lève - j'ai collé le   extrait de mon code à [5]. (J'utilise une version un peu ancienne de   django-ratings b / c Je n'ai pas eu le temps de mettre à jour; ça peut paraître un peu   différent maintenant, je ne suis pas sûr.)   Enfin, je voulais deux autres choses:   1) Si un utilisateur a déjà évalué un élément et visualise l'option "évaluer cet élément". forme   encore une fois, le " widget étoile " doit être préréglé avec la note précédente de l'utilisateur,   au lieu de simplement montrer cinq étoiles vierges. J'ai réalisé la meilleure façon de faire   c'était du côté du client: un événement onload qui simule l'utilisateur   en cliquant sur l'étoile sur laquelle il a déjà cliqué. Ma vue et le code de modèle pour   c'est à [6]; Je viens de comprendre les formats HTML que jquery-star-rating   définit et attend, et cliqué sur l'étoile appropriée pour l'utilisateur   cote existante.   2) Lors de la visualisation de l'article, les évaluations des utilisateurs

Autres conseils

Il existe une application django-ratings sur PyPi. Il peut vous attribuer le pourcentage, 'myinstance.rating.get_percent ()', à utiliser dans votre modèle pour la largeur de div interne du tour CSS que vous avez mentionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top