Django: Atomic operations on a directory in media storage
This is something you should fix at the web application level, not at the Mercurial level.  If you're fine with having people wait you set up a distributed locking scheme where the web worker thread tries to acquire a repository-specific lock from shared memory/storage before taking any actions.  If it can't acquire the lock you respond with either a status-code 503 with a retry-after header or you have the web-worker thread retry until it can get the lock or times out.
Our Django project provides interfaces to users to create repository

create new repo
add new changes to existing repo

Any user can access any repo to make changes directly via an HTTP POST containing changes.
Its totally fine if the traffic is less. But if the traffic increases up to the point that multiple users want to add changes to same repo at exactly same time, how to handle it?
We currently use Hg (Mercurial) for repos