Sunday, October 22, 2017

Re: Generating a unique 10 digit ID for each model instance

Hi,

I think you are correct with your pseudocode - you can do a Model.objects.filter(unique_code==random_code).count() - and then loop on that. It should work.

The reason why I thought you should use the signals is because thats how I have done the same things in the past. However, you can just overload the save method and then do it there (if there is no PK).

Regards,

Andréas

2017-10-22 20:53 GMT+02:00 Jack Zhang <valachio123@gmail.com>:
Hi Andréas,

Yes, by globally unique I mean a unique 10-digit ID is assigned to every model instance of 'Dogs' within my application.  This ID will be shown publicly on the website to allow easy search access to a specific model instance.

I think you are right about creating a new field to hold the unique ID, instead of using the primary key.  Generating the ID is not too difficult, but how can I ensure that I won't generate a duplicate ID?  From briefly thinking about it, this is what I got...

When a new instance is created, generate new ID
For every existing ID in the database:
     If new ID == existing ID in the database:
          Generate new ID and re-run the for loop
If new ID does not match any existing ID  in the database, proceed with continuing the model instance.

Also I read up on Signals, but is it necessary?


On Sunday, October 22, 2017 at 12:30:02 PM UTC-4, Andréas Kühne wrote:
Hi,

When you say "globally unique" - I am supposing you mean within your application?

What you need to do is set a field to be the primary key, see : https://docs.djangoproject.com/en/1.11/topics/db/models/#automatic-primary-key-fields

However - it would be simpler to use the standard primary key auto id field, and then add another field to hold your unique ID in it. This could then be created on the pre_save signal and you could write something that randomly generates the unique ID field. See https://docs.djangoproject.com/en/1.11/topics/signals/

Best regards,

Andréas

2017-10-22 17:52 GMT+02:00 Jack Zhang <valac...@gmail.com>:
Let's say I have a model called 'Dogs'.  Users can create instances of Dogs.  For every Dogs instance that is created, I want to assign a globally unique ID to it.  The ID will be 3 capitalized letters followed by 7 numbers.  E.g. ABC1234567, POZ2930193

What is the easiest way to go about doing this?  I looked into UUID but it generates a longer string.  Keep in mind that the ID must be globally unique - so after one has been created, it should not be created again.

Thanks.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/0cd8e33c-8c92-471c-9c36-ac82749750b4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/f7675114-b219-45a3-a7a6-372a223435f3%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAK4qSCfWBV6k0xvW4k79J6Rj6B8rS9a1%3DL-H4qrU2hLUfw%3D1iw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment