text: Title: UniqueViolationError within a transaction (using get_or_create)
  Body: I noticed that when multiple concurrent executions of my `add_list` coroutine overlap, occasionally I get `UniqueViolationError`. I initially thought this was protected against by using a transaction. But it seems that the transaction does not block other coroutines from starting another transaction (on same table) as well, is that correct?
  
  For illustration, the `add_list` function looks something like the following, and is started multiple times (concurrently), with almost no break in between. 
  
  ```
  async def add_main(i):
      m = await Main.objects().get_or_create(Main.key == f"Main-{i}")
      a = await EntityA.objects().get_or_create(EntityA.key == f"EntityA-{i}")
      m.foreign_1 = a
      await m.save()
  
  async def add_list():
      async with Main._meta.db.transaction():
          for i in range(100):
              await add_main(i)
  ```
  
  I don't get the `UniqueViolationError` on the "Main" table, but on a related one (e.g. EntityA), and while doing `get_or_create`. I think I will add an `with asyncio.Lock` before the transaction - Or are there better ways to prevent the `UniqueViolationError` from occurring?