[Django] #31701: Extend DeferredAttribute & Remove unnecessary overriding of contrib_to_class () in FileField

14 views
Skip to first unread message

Django

unread,
Jun 12, 2020, 8:10:47 AM6/12/20
to django-...@googlegroups.com
#31701: Extend DeferredAttribute & Remove unnecessary overriding of
contrib_to_class () in FileField
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Database | Version: 3.1
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 1
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
-------------------------------------+-------------------------------------
The model fields use, by default, the descriptor **DeferredAttribute** to
access and process (if necessary) the data associated with them. This type
of data represents the actual data in db column. I prefer to call it a
“field data”.

To access the field data in instance dict, **Field.attname** is used as a
key.

In addition to the field data, some other model fields (for example, FK)
also use a "client data" of the attribute, the processing of which is
performed by a particular descriptor. Such a descriptor is usually
assigned to a model using **Field.name**.

This enables us to process and present data in different ways:
article.author returns a User object, and article.auther_id returns a User
object pk.

This feature is not used in model.FileField. Then why use FileField.name
instead of FileField.attname for FileDescriptor?

I think it would be better if FileDescriptor uses field.attname and
continue working with the DeferredAttribute class.

--
Ticket URL: <https://code.djangoproject.com/ticket/31701>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Jun 12, 2020, 9:10:00 AM6/12/20
to django-...@googlegroups.com
#31701: Extend DeferredAttribute & Remove unnecessary overriding of
contrib_to_class () in FileField
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Database layer | Version: 3.1
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Sultan:

Old description:

> The model fields use, by default, the descriptor **DeferredAttribute** to
> access and process (if necessary) the data associated with them. This
> type of data represents the actual data in db column. I prefer to call it
> a “field data”.
>
> To access the field data in instance dict, **Field.attname** is used as a
> key.
>
> In addition to the field data, some other model fields (for example, FK)
> also use a "client data" of the attribute, the processing of which is
> performed by a particular descriptor. Such a descriptor is usually
> assigned to a model using **Field.name**.
>
> This enables us to process and present data in different ways:
> article.author returns a User object, and article.auther_id returns a
> User object pk.
>
> This feature is not used in model.FileField. Then why use FileField.name
> instead of FileField.attname for FileDescriptor?
>
> I think it would be better if FileDescriptor uses field.attname and
> continue working with the DeferredAttribute class.

New description:

The model fields use, by default, the descriptor **DeferredAttribute** to
access and process (if necessary) the data associated with them. This type
of data represents the actual data in db column. I prefer to call it a
“field data”.

To access the field data in instance dict, **Field.attname** is used as a
key.

In addition to the field data, some other model fields (for example,

ForeignKey) also use a "client data" of the attribute, the processing of


which is performed by a particular descriptor. Such a descriptor is
usually assigned to a model using **Field.name**.

This enables us to process and present data in different ways:
article.author returns a User object, and article.auther_id returns a User
object pk.

This feature is not used in model.FileField. Then why use FileField.name
instead of FileField.attname for FileDescriptor?

I think it would be better if FileDescriptor uses field.attname and
continue working with the DeferredAttribute class.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:1>

Django

unread,
Jun 12, 2020, 10:41:59 AM6/12/20
to django-...@googlegroups.com
#31701: Extend DeferredAttribute & Remove unnecessary overriding of
contrib_to_class () in FileField
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Database layer | Version: master

(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Sultan):

* version: 3.1 => master


Old description:

> The model fields use, by default, the descriptor **DeferredAttribute** to
> access and process (if necessary) the data associated with them. This
> type of data represents the actual data in db column. I prefer to call it
> a “field data”.
>
> To access the field data in instance dict, **Field.attname** is used as a
> key.
>
> In addition to the field data, some other model fields (for example,

> ForeignKey) also use a "client data" of the attribute, the processing of


> which is performed by a particular descriptor. Such a descriptor is
> usually assigned to a model using **Field.name**.
>
> This enables us to process and present data in different ways:
> article.author returns a User object, and article.auther_id returns a
> User object pk.
>
> This feature is not used in model.FileField. Then why use FileField.name
> instead of FileField.attname for FileDescriptor?
>
> I think it would be better if FileDescriptor uses field.attname and
> continue working with the DeferredAttribute class.

New description:

The model fields use, by default, the descriptor **DeferredAttribute** to
access and process (if necessary) the data associated with them. This type
of data represents the actual data in db column. I prefer to call it a
“field data”.

To access the field data in instance dict, **Field.attname** is used as a
key.

In addition to the field data, some other model fields (for example,

ForeignKey) also use a "client data" of the attribute, the processing of


which is performed by a particular descriptor. Such a descriptor is
usually assigned to a model using **Field.name**.

This enables us to process and present the data in different ways:


article.author returns a User object, and article.auther_id returns a User
object pk.

This feature is not used in model.FileField. Then why use FileField.name
instead of FileField.attname for FileDescriptor?

I think it would be better if FileDescriptor uses field.attname and
continue working with the DeferredAttribute class.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:2>

Django

unread,
Jun 13, 2020, 1:19:29 PM6/13/20
to django-...@googlegroups.com
#31701: Extend DeferredAttribute & Remove unnecessary FileField.contrib_to_class
()

-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Sultan:

Old description:

> The model fields use, by default, the descriptor **DeferredAttribute** to


> access and process (if necessary) the data associated with them. This
> type of data represents the actual data in db column. I prefer to call it
> a “field data”.
>
> To access the field data in instance dict, **Field.attname** is used as a
> key.
>
> In addition to the field data, some other model fields (for example,

> ForeignKey) also use a "client data" of the attribute, the processing of


> which is performed by a particular descriptor. Such a descriptor is
> usually assigned to a model using **Field.name**.
>

> This enables us to process and present the data in different ways:


> article.author returns a User object, and article.auther_id returns a
> User object pk.
>
> This feature is not used in model.FileField. Then why use FileField.name
> instead of FileField.attname for FileDescriptor?
>
> I think it would be better if FileDescriptor uses field.attname and
> continue working with the DeferredAttribute class.

New description:

The model fields use, by default, the descriptor **DeferredAttribute** to
access and process (if necessary) the data associated with them. This type
of data represents the actual data in db column. I prefer to call it a
“field data”.

To access the field data in instance dict, **Field.attname** is used as a
key.

In addition to the field data, some other model fields (for example,

ForeignKey) also use a "client data" of the attribute, the processing of


which is performed by a particular descriptor. Such a descriptor is

usually assigned to a model using **Field.name**. Its task is to present
the same field data in a different format, the result of which differs
from the result of Field.attname descriptor: `article.author` returns a


User object, and `article.auther_id` returns a User object pk.

This feature is not used in FileField. Then why use FileField.name instead
of FileField.attname for FileDescriptor?

I think it would be better if FileDescriptor uses FileField.attname and


continue working with the DeferredAttribute class.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:3>

Django

unread,
Jun 13, 2020, 1:20:52 PM6/13/20
to django-...@googlegroups.com
#31701: Extend DeferredAttribute & Remove unnecessary FileField.contrib_to_class
()

-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Sultan:

Old description:

> The model fields use, by default, the descriptor **DeferredAttribute** to


> access and process (if necessary) the data associated with them. This
> type of data represents the actual data in db column. I prefer to call it
> a “field data”.
>
> To access the field data in instance dict, **Field.attname** is used as a
> key.
>
> In addition to the field data, some other model fields (for example,

> ForeignKey) also use a "client data" of the attribute, the processing of


> which is performed by a particular descriptor. Such a descriptor is

> usually assigned to a model using **Field.name**. Its task is to present
> the same field data in a different format, the result of which differs

> from the result of Field.attname descriptor: `article.author` returns a


> User object, and `article.auther_id` returns a User object pk.

> This feature is not used in FileField. Then why use FileField.name


> instead of FileField.attname for FileDescriptor?
>

> I think it would be better if FileDescriptor uses FileField.attname and


> continue working with the DeferredAttribute class.

New description:

The model fields use, by default, the descriptor **DeferredAttribute** to
access and process (if necessary) the data associated with them. This type
of data represents the actual data in db column. I prefer to call it a
“field data”.

To access the field data in instance dict, **Field.attname** is used as a
key.

In addition to the field data, some other model fields (for example,

ForeignKey) also use a "client data" of the attribute, the processing of


which is performed by a particular descriptor. Such a descriptor is

assigned to a model using **Field.name**. Its task is to present the same
field data in a different format, the result of which differs from the

result of Field.attname descriptor: `article.author` returns a User


object, and `article.auther_id` returns a User object pk.

This feature is not used in FileField. Then why use FileField.name instead
of FileField.attname for FileDescriptor?

I think it would be better if FileDescriptor uses FileField.attname and


continue working with the DeferredAttribute class.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:4>

Django

unread,
Jun 15, 2020, 2:16:49 AM6/15/20
to django-...@googlegroups.com
#31701: Extend DeferredAttribute & Remove unnecessary FileField.contrib_to_class
()

-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Sultan:

Old description:

> The model fields use, by default, the descriptor **DeferredAttribute** to


> access and process (if necessary) the data associated with them. This
> type of data represents the actual data in db column. I prefer to call it
> a “field data”.
>
> To access the field data in instance dict, **Field.attname** is used as a
> key.
>
> In addition to the field data, some other model fields (for example,

> ForeignKey) also use a "client data" of the attribute, the processing of


> which is performed by a particular descriptor. Such a descriptor is

> assigned to a model using **Field.name**. Its task is to present the same
> field data in a different format, the result of which differs from the

> result of Field.attname descriptor: `article.author` returns a User


> object, and `article.auther_id` returns a User object pk.
>

> This feature is not used in FileField. Then why use FileField.name


> instead of FileField.attname for FileDescriptor?
>

> I think it would be better if FileDescriptor uses FileField.attname and


> continue working with the DeferredAttribute class.

New description:

The model fields use, by default, the descriptor **DeferredAttribute** to
access and process (if necessary) the data associated with them. This type
of data represents the actual data in db column. I prefer to call it a
“field data”.

To access the field data in instance dict, **Field.attname** is used as a
key.

In addition to the field data, some other model fields (for example,

ForeignKey) also use a "client data" of the attribute, the processing of


which is performed by a particular descriptor. Such a descriptor is

assigned to a model using **Field.name**. Its task is to present the same
field data in a different format, the result of which differs from the

result of Field.attname descriptor: `article.author` returns a User


object, and `article.auther_id` returns a User object pk.

This feature is not used in FileField. Then why use FileField.name instead
of FileField.attname for FileDescriptor?

I think it would be better if FileDescriptor extends the DeferredAttribute
class and uses `field.attname` instead of `field.name`.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:5>

Django

unread,
Jun 15, 2020, 6:50:35 AM6/15/20
to django-...@googlegroups.com
#31701: Make FileDescriptor subclass DeferredAttribute.
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: Sultan
Type: | Status: assigned

Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* owner: nobody => Sultan
* status: new => assigned
* stage: Unreviewed => Accepted


Comment:

Looks reasonable.

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:6>

Django

unread,
Jun 15, 2020, 8:37:01 AM6/15/20
to django-...@googlegroups.com
#31701: Make FileDescriptor subclass DeferredAttribute.
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: Sultan
Type: | Status: assigned
Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Sultan):

Replying to [comment:6 felixxm]: It's much better. Thanks.

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:7>

Django

unread,
Jun 30, 2020, 1:27:38 AM6/30/20
to django-...@googlegroups.com
#31701: Make FileDescriptor subclass DeferredAttribute.
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: Sultan
Type: | Status: assigned
Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:8>

Django

unread,
Jun 30, 2020, 2:48:40 AM6/30/20
to django-...@googlegroups.com
#31701: Make FileDescriptor subclass DeferredAttribute.
-------------------------------------+-------------------------------------
Reporter: Sultan | Owner: Sultan
Type: | Status: closed

Cleanup/optimization |
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution: fixed

Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak <felisiak.mariusz@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"a93425a37f4defdb31d4ca96bb3bf6da21f0b5ce" a93425a]:
{{{
#!CommitTicketReference repository=""
revision="a93425a37f4defdb31d4ca96bb3bf6da21f0b5ce"
Fixed #31701 -- Made FileDescriptor subclass DeferredAttribute.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/31701#comment:9>

Reply all
Reply to author
Forward
0 new messages