J'ai configuré des abonnements pour les utilisateurs afin qu'ils puissent avoir la possibilité d'afficher des livres sélectionnés sous un certain type d'abonnement. Dans ce cas, comment un utilisateur peut-il voir la liste des livres sous son type d'adhésion dans sa page de profil?
Voici mes codes pour les livres:
def profile(request): ```some update profile post code here``` context = { 'u_form': u_form, 'p_form': p_form } return render(request, 'users/profile.html', context)
Voici pour le modèles d'adhésion:
class Membership(models.Model): membership_type = models.CharField(max_length=50) price = models.IntegerField(default=100) description = models.CharField(max_length=200) def __str__(self): return self.membership_type class Customer(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) membership = models.ForeignKey(Membership, on_delete=models.CASCADE, null=True) reference = models.CharField(max_length=50, null=True) def __str__(self): return self.user.email
Et voici la vue du profil:
class Book(models.Model): ``` some book fields``` activeReference = models.ManyToManyField(Membership) #here's where membership connects```` def __str__(self): return self.title def get_absolute_url(self): return reverse('book-detail', kwargs={'slug': self.slug})
Je m'attends à ce que l'utilisateur consulte tous ses livres sous son type d'abonnement.
3 Réponses :
créer un nouveau fichier de modèle pour afficher tous les livres, utiliser la fonction ListView in view et appeler le fichier de modèle en tant que template = 'template_name' et également importer un modèle
Cela ne semble pas du tout lié à la question.
Vous pouvez le faire comme ceci:
{{ user.customer.membership.book_set.all }}
Ici, dans le modèle, vous pouvez accéder à l'instance User
par {{user}}
s'il est connecté. Ensuite, vous pouvez accéder à l'instance customer
car elle a OneToOne relation avec CustomerModel
. Membership
est un modèle FK à Membership
. Enfin, vous pouvez accéder aux instances de livre via relation inverse ( book_set ).
Merci pour ton explication. Y a-t-il de toute façon que je puisse le mettre dans une boucle for pour que l'utilisateur puisse le voir comme une liste connectée à l'url absolue du livre?
Bien sûr {% pour le livre dans user.customer.membership.book_set.all%} {{book.get_absolute_url}} {% enfor%}
{{user.customer.membership.book_set.all}}