Couple of comments. The lack of tests would personally keep me from using this library, it's a pretty simple setup and relatively easy to test so it shouldn't be too hard. Also keep in mind that hitting the database for something like an AB test isn't going to perform very well at large scale. Finally, you're reimplementing a built in Django feature with your get_or_create_* functions. Just call Model.objects.get_or_create(...) no reason to rebuild that particular wheel.