Skip to content

ivelum/django-uidfield

Folders and files

NameName
Last commit message
Last commit date

Latest commit

bbd421d · Dec 16, 2024

History

68 Commits
Dec 16, 2024
Dec 16, 2024
Oct 30, 2017
Dec 16, 2024
Oct 10, 2017
Dec 16, 2024
Dec 16, 2024
Dec 16, 2024
Dec 16, 2024
Dec 16, 2024

Repository files navigation

PyPI latest GitHub Actions

About

Pretty UID fields for your Django models, with customizable prefixes and controlled length. Tested against Python 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 and Django 2.2, 3.1, 3.2, 4.0, 4.1, 4.2, 5.0, 5.1.

Usage

See examples below. You can optionally inherit your models from UIDModel, which gracefully handles IntegrityError on saving UIDs, making up to 3 attempts with random UIDs. Integrity errors should be pretty rare if you use large enough max_length on your fields, but you may still want to use it for extra safety:

from django_uidfield.fields import UIDField

class YourModel(models.Model):
    uid_field = UIDField(prefix='tmp_', max_length=20)

# the value will be like 'tmp_Akw81LmtPqS93dKb'

or:

from django_uidfield.models import UIDModel
from django_uidfield.fields import UIDField


class YourModel(UIDModel):
    uid_field = UIDField(prefix='tmp_', max_length=20)

Adding a UIDField to an existing model

You can populate the field with a data-migration:

def populate_uid(apps, schema_editor):
    User = apps.get_model("users", "User")

    for user in User.objects.all():
        user._meta.get_field("uid").populate(user, force_renew=True)
        user.save()


class Migration(migrations.Migration):
    operations = [migrations.RunPython(code=populate_uid)]

Note that the 3-attempt deduplication mechanism will not work, and you can get an error if you have a lot of objects and a small max_length.

Changelog

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages