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

Le problème exposé dans ce sujet a été résolu.

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 !

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

+0 -0

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". ;)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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