#5929: Allow Fields to use multiple db columns (complex datatypes)
-------------------------------------+-------------------------------------
     Reporter:  Daniel               |                    Owner:  HAMA
  Poelzleithner                      |  Barhamou
         Type:  New feature          |                   Status:  closed
    Component:  Database layer       |                  Version:  dev
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:  duplicate
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Comment (by Simon Charette):

 > The code written for #373 could be refactored and re-used here. Or maybe
 not? My problem with this ticket is it doesn't really describe what it
 wants to achieve exactly. If this is re-opened I suggest we define a clear
 interface and set of behaviours that CompositeField needs to support
 first.

 In my opinion this ticket would be a good ''home'' for the
 [https://github.com/django/django/pull/17279 the work that Lily started]
 around generic composite fields and that you validated and specialized
 around primary keys support at first. Being able to define fields that are
 composed of other fields is not only useful from a model definition
 perspective, as referenced in this ticket, but it's also an important part
 missing in the ORM to represent functions that return rows.

 There are a few instances in the ORM resolving logic where subqueries and
 set-returning functions are special cased by instance type checks due to
 the impossibility of representing their `output_field` as a
 `CompositeField`. For example, `Author.objects.values("id", "name")`
 
[https://github.com/django/django/blob/c075d4c2c8cef3c9b28180c749d421c63544a9dd/django/db/models/sql/query.py#L321-L327
 fakes] its `output_field` to the one associated with `id` instead of
 simply being `CompositeField(IntegerField(name="id"),
 CharField(name="name"))`.

 From working on a few features/bugs that relate to subquery resolving and
 fiddling with aggregation though subquery (#28296), composite queries
 (`UNION` and friends), subquery annotations with multiple columns
 (#33706), and implicit wrapping of a subquery I can tell you that being
 able to use `CompositeField` as any `Expression.output_field` and have
 good support for it internally would simplify many of these problems.

 If only for internal usage at first I think it would be worth adding.

 > I don't understand how the IP address problem is related to generic
 CompositeFields, that's a very specific use case and we already have
 GenericIPAddressField.

 This ticket was created 17 years ago and at that time there was no
 `GenericIPAddressField`
 ([https://docs.djangoproject.com/en/stable/releases/1.4/#extended-
 ipv6-support added in 1.4 released in 2012]), no support for custom
 lookups and transforms or expressions of any form, nor migrations, and
 custom fields support was also limited. Today what was initially requested
 in this ticket can be implemented with custom lookups and would be greatly
 simplified by the usage of the `inet` type on Postgres.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/5929#comment:35>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/01070193a73ef94c-45741d29-2522-4c44-a3d5-56c4efd04f5b-000000%40eu-central-1.amazonses.com.

Reply via email to