Skip to main content

The Follow Feature


In my last blog, I described how I dealt with the user profile issue I faced but it wasn't over, a bigger issue was yet to be solved. Instagram has given us a really good feature which we call "Follow", that lets us follow any other user and see whatever they post or in simpler words whatever they want the world to see. Simple, isn't it? Well in programming point of view, not really. Friends and Followers are the next most important part of an SNS (Social networking site). Why shouldn't it be? Most of the people use them so they could showoff things to other friends, family or someone totally unknown just because it somehow makes them feel valued. What kind of a disorder is that? Well, that's a totally different story which we are not supposed to discuss now. This feature so important because what's the point of calling it a social networking site when you don't have a network. So this problem is solved by me in the following manner
To begin with, let me tell you an interesting fact. Following on Instagram is quite different from friends on facebook. Friends in Facebook is a symmetrical relationship, I am your friend and hence you are my friend but following is not a symmetrical relationship, if you are interested in my stuff you can follow me and look at my stuff but I don't have to see your stuff until I am interested. Not exactly an interesting fact you expected but for the beginners like me, you got to know some technical terminology. There are many solutions to this problem and I am going to discuss the solutions I know. The first solution is a many to many relationships from the user table to itself. Don't be too confused and read the last line again. As you are following my blog you must be knowing what one to one and many to many relationships are. As your follower is also a user, a user can have many followers and many users can follow a user, Many to many relationships suit the situation. Done?  Not really, told you it isn't that easy. In Django for any relation, the reverse is also possible. To be simple all relations are symmetrical by default. This troubled me a lot and then our friend StackOverflow help and there is a keyword argument that could be passed in order to prevent this symmetrical relation, that is "symmetrical=False". This was one way of doing it. Another way of doing it, which I found suited my need best was maintaining a different table for the relation, each record of this new table will be having two fields follower and following, both of them would be users, hence each relation would be stored in a table and it would be convenient for our needs such as follower count and following count. I want to say this again, that this approach is best suited to my needs in My opinion and this is not the standard or the best way if any other way suits your situation well feel free to use it.
In this way, I have solved the problem of how to store the following details. Stay in touch for my further explorations 😉

Comments

Popular posts from this blog

The User Profile

This is my second blog about my Instagram project and till now I am confronted with many questions and problems, two such problems are how to store the user profile and how to implement the "follow" feature of Instagram. In this blog, I will describe the prior problem To any social networking site, the most important component is its end user. The user has his/her important role in the functioning of a social networking site and that part doesn't need a description. Till now, for all my mini projects, whenever the user was required I have used the User model of the Django framework, but this is something different. An SNS(social networking site) always has a user profile which holds a wide variety of information such as status, display picture, email, links to other sites etc but the Django's User model has only some fields namely first name, last name, email, username, password. Only this handful of information cannot account for the user profile. I know many of y...

The First Big Error

So everything was going fine till now and I was progressing in my project, but as we know that coding is riding a bike in Jurassic Park, where you can encounter a dinosaur like errors. I encountered an error in my code. First I will tell you the background details that are necessary to know to be clear about the error occurred, then I will tell you about the error and then we would go to how I solved it. So all of you must have read about how I was maintaining the user profile if not you can read it here  "The User Profile" . I would insist on going back to this link again as I have uploaded an image to make things even more clear about how did it. So I had additional fields on my user profile such as image, email, status, city etc. I have used Django signals to create user profile whenever a user is created. To those who don't know what signals are, Signals are built-in in Django which are used to execute some lines of code when some other line of code is executed. Th...