Opened 8 years ago

Last modified 8 weeks ago

#17337 new Bug

[nonrel] Support for non-integer AutoFields

Reported by: Jonas H. Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Normal Keywords: nonrel
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

(This patch is part of the changes made to the inofficial fork "Django-nonrel" which adds basic support for non-relational databases.)

This patch adds basic support for non-integer primary keys. It works by not restricting primary keys to int and factoring out pk validation/type conversion into the backend.

Attachments (1)

nonint-autoid.patch (3.7 KB) - added by Jonas H. 8 years ago.

Download all attachments as: .zip

Change History (10)

Changed 8 years ago by Jonas H.

Attachment: nonint-autoid.patch added

comment:1 Changed 8 years ago by Carl Meyer

Triage Stage: UnreviewedAccepted

Accepting the ticket, as support for non-integer auto-fields is certainly desirable. I believe there's a different implementation of it in Alex Gaynor's 2010 GSoC code - I don't know which implementation is preferable.

comment:2 Changed 8 years ago by Russell Keith-Magee

IIRC, Alex's GSoC code punted on this issue (or, at least, had code that wasn't suitable for trunk), because we couldn't come up with a way to introduce it without introducing backwards incompatibilities. I seem to recall there were a bunch of places in the code that assumed that AutoFields were integers; however, it's been a while, so I might be mis-remembering.

comment:3 Changed 8 years ago by Jonas H.

A few contrib apps assume PKs to be integers and also it gets tricky when it comes to testing with fixtures. Should we address all these issues at once or fix them bit by bit in multiple tickets?

comment:4 Changed 8 years ago by Aymeric Augustin

Type: UncategorizedBug

Two tickets (#17214, #17122) were recently reported about problems in the admin with models using non-integer primary keys. A quick search for "primary_key" turns up lots of other problems with non-integer primary keys. Clearly people are trying to use them, and as far as I can see, the docs don't forbid it.

Version 0, edited 8 years ago by Aymeric Augustin (next)

comment:5 Changed 8 years ago by Aymeric Augustin

Summary: [nonrel] Support for non-integer primary keys[nonrel] Support for non-integer automatic primary keys

comment:6 Changed 6 years ago by Tim Graham

Patch needs improvement: set

comment:7 Changed 5 years ago by Collin Anderson

Summary: [nonrel] Support for non-integer automatic primary keys[nonrel] Support for non-integer AutoFields

comment:8 Changed 3 months ago by Nick Pope

This is partially addressed by PR for #29979, but will further depend on #470 for default values for non-integer fields as well as #24042 for replacing isinstance(..., AutoField) checks.

comment:9 Changed 8 weeks ago by Mariusz Felisiak <felisiak.mariusz@…>

In 21e5594:

Fixed #29979, Refs #17337 -- Extracted AutoField field logic into a mixin and refactored AutoFields.

This reduces duplication by allowing AutoField, BigAutoField and
SmallAutoField to inherit from IntegerField, BigIntegerField and
SmallIntegerField respectively. Doing so also allows for enabling the
max_length warning check and minimum/maximum value validation for auto
fields, as well as providing a mixin that can be used for other possible
future auto field types such as a theoretical UUIDAutoField.

Note: See TracTickets for help on using tickets.
Back to Top