#23780: Easy to use natural keys from a tuple on meta
-------------------------------------+-------------------------------------
Reporter: scrummyin | Owner: nobody
Type: New feature | Status: new
Component: Core | Version: master
(Serialization) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by freakboy3742):
Personally, I disagree with the original premise - I don't see defining a
pair of natural key functions as "cumbersome". It's two methods, each of
which are relatively straightforward to define for the simple case, but
which can have some interesting edge cases for the complex case - e.g., if
a foreign key is involved in a natural key, do you render the PK value? Or
do you use the natural key of the foreign key? What if that natural key
has a foreign key? What's the precedence of manually defined natural key
function over the Meta defined one? What about if you only define *one* of
the two natural key functions?
I'll note that the provided patch doesn't appear to test any of these edge
cases - it only explores the simple (and obvious) case of "a single value-
based field as natural key".
I see this as a case where explicit is better than implicit. If we
implement this, we're going to have an implementation that is non-trivial
to cover all possible use cases, which means introducing a complexity in
implementation, which will need to be maintained (and will inevitably get
more complex when things like composite fields, and the foreign key
refactor that Anssi is sitting on hit trunk). There's also some
documentation for a new feature, - instead of an explicit API entry point
that implements a specific behavior, you have a configuration value, and
newcomers need to know about and understand the internal behavior before
they can use the feature reliably.
Or, we have a relatively simple 4 lines of explicit code on any project
that needs a natural key; maybe 6 lines of code if it's a complex case
(and it's the complex case that has the complex code - the simple case
doesn't pay any overhead).
So - I'm a -0 on the general idea.
That said, the idea has come up a couple of times in the recent past, so
there's clearly some community interest. If we *must* have an
implementation of this feature, a meta attribute is about as good as it's
going to get - it's certainly better than the "automagically interpret
natural keys from model definition" that has been proposed by others.
--
Ticket URL: <https://code.djangoproject.com/ticket/23780#comment:4>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/067.dc978fd09ef305ae59ef823ecb7c8e9f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.