Ivan
Ivan

Reputation: 21

Django Many-to-Many related_name

enter image description here

class Profile(models.Model): 
    user              = models.OneToOneField(User)
    followers         = models.ManyToManyField(User, related_name='is_following', blank=True) 
    activation_key    = models.CharField(max_length=120, blank=True, null=True)
    activated         = models.BooleanField(default=False)
    timestamp         = models.DateTimeField(auto_now_add=True)
    updated           = models.DateTimeField(auto_now=True)

    objects = ProfileManager()

    def __str__(self):
        return self.user.username 

in shell when I type User.profile.followers.all() and when i type User.is_following.all() I receive different result.

Upvotes: 2

Views: 3715

Answers (1)

AntoineLB
AntoineLB

Reputation: 482

First, i'd change :

followers = models.ManyToManyField(User

to

followers = models.ManyToManyField(Profile

Then, if you try to print

 user1 = Profile.objects.create() #missing args but you don't need it for the example
 user2 = Profile.objects.create()
 user1.followers.add(user2)
 user1.followers.all() 

You'll get :

[user2]

But if you do

 user1.is_following.all() 

You'll get :

[]

Finally, if you do :

user2.is_following.all() 

Result will be :

[user1]

related_name allows you to get your object in another object.

Upvotes: 1

Related Questions