2011-06-02 13 views
10

Quiero implementar la función seguidores/siguiente en mi aplicación Django.Cómo implementar seguidores/siguiendo en Django

Tengo una clasePerfilUsuario para cada usuario (django.contrib.auth.User):

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique = True, related_name = 'user') 
    follows = models.ManyToManyField("self", related_name = 'follows') 

Así que trató de hacer esto en Python Shell:

>>> user_1 = User.objects.get(pk = 1) # <-- mark 
>>> user_2 = User.objects.get(pk = 2) # <-- john 
>>> user_1.get_profile().follows.add(user_2.get_profile()) 
>>> user_1.get_profile().follows.all() 
[<UserProfile: john>] 
>>> user_2.get_profile().follows.all() 
[<UserProfile: mark>] 

Pero como puede ver, cuando agrego un nuevo usuario al campo follows de un usuario, también se agrega la relación simétrica en el otro lado. Literalmente: si user1 sigue a user2, también user2 sigue a user1, y esto es incorrecto.

¿Dónde está mi error? ¿Tienes alguna forma de implementar seguidores y seguir correctamente?

Gracias chicos.

Respuesta

18

Conjunto symmetrical en False en su relación Many2Many:

follows = models.ManyToManyField('self', related_name='follows', symmetrical=False) 
+0

Es correcto amigo. Gracias. –

+2

¿Cuál es la diferencia entre simétrico = falso y nombre_relacionado = 'fie +'? – danielrvt

11

Además de la respuesta de mouad, puedo sugerir elegir un diferente * related_name *: Si Mark sigue John, a continuación, la marca es uno de Juan de seguidores, ¿verdad?

+0

+1 Estás diciendo que es el tipo correcto. –

Cuestiones relacionadas