Meilleure façon de gérer des Follow entre Profile

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je travail en ce moment sur un tout petit projet avec Django. J'ai besoin de mettre en place un système de follow sur celui-ci. J'ai donc une classe Profile qui a pour définition (j'ai supprimé tout ce qui était inutile) :

1
2
3
class Profile(models.Model):
    user = models.OneToOneField(User)
    follows = models.ManyToManyField('Profile', related_name='followed_by')

Je me demandais si le ManyToManyField était la meilleure solution pour ce que je souhaite faire ? Ou il vaudrait mieux avoir une classe qui ressemble à ça :

1
2
3
4
class Follow(models.Model):
    follower = models.ForeignKey(User, related_name="who_follows")
    followed = models.ForeignKey(User, related_name="who_is_followed")
    follow_time = DateTimeField(auto_now=True)

La première méthode fonctionne bien, mais je ne vois pas du tout comment faire pour récupérer la liste des personne qui suivent une personne dans une template.

Merci de votre aide !

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Pour moi ta première classe est OK. Si tu veux avoir des informations supplémentaires tu peux créer une classe entre les deux modèles (en soit le résultat en BDD est le même).

Si tu veux des informations sur le parcours des objets qui utilisent des M2M : https://docs.djangoproject.com/fr/1.9/topics/db/models/#extra-fields-on-many-to-many-relationships

Dans ton cas ça va donner ça :

1
2
3
4
{% for user in users %}
    {{ user.username }}
    {% for u in user.profile.follows.all %}{{ u }}<br/>{% endfor %}
{% endfor %}

(ajoute à ça de l'HTML et de l'optimisation niveau chargement de Profile)

EDIT : grillé par victor mais moi j'ai un zoli exemple :p

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+1 -0
Auteur du sujet

On va pas faire de jaloux, merci à tous les deux ! Je ne savais pas que c'était comme ça que fonctionnait un ManyToMany.

Avoir les personnes que l'instance de Profile suit, ça j'y arrive sans problème :

1
<p>{{ profile.follows.all|length }} followings</p>

C'est l'inverse que je n'arrive pas, avoir les personnes qui suivent l'instance de Profile. Les "followers". ;)

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte