J'ai un modèle de livre qui peut être ajouté aux favoris de l'utilisateur. Donc, je définissais 2 classes:Demande d'utilisateur modèle Django
class Book(models.Model):
name = models.CharField(max_length = 40)
class UserFavorite(models.Model):
book = models.ForeignKey(Book)
user = models.ForeignKey(User)
Maintenant, je voudrais montrer sur la page principale des livres populaires avec une icône soit « ajouter aux favoris » ou « des favoris ». Fondamentalement, je passe tableau de livres populaires à un modèle et à partir du modèle je boucle à travers ce tableau et devrait dire "if book.is_in_favorites (request.user): ...", mais ce n'est pas possible à partir du modèle.
1) Dois-je définir is_fav dans le modèle Book? Ou cela va ajouter un champ "à la volée"? 2) L'approche est correcte, bien qu'il faut exécuter plusieurs instructions select (une pour tous les livres, puis une pour chaque livre pour is_fav), ce qui affecte les performances. Peut-être y at-il un moyen de le faire avec seulement 1 requête qui obtient tous les livres? – Vitaly
En fait, j'ai trouvé qu'il y a "extra" clause qui peut ajouter des propriétés à la volée, je vais essayer de l'utiliser – Vitaly
Si vous voulez éviter les recherches répétées causées par l'instruction for (et puisque select_related * ne sera pas * aider ici) vous appelez UserFavorites.objects.filter (utilisateur = request.user) et comparez votre itération des livres à l'ensemble des UserFavorites renvoyés. Ensuite, il n'y a que 2 hits DB. –