[Django] #21711: Check for duplicate model names

6 views
Skip to first unread message

Django

unread,
Dec 30, 2013, 5:24:37 PM12/30/13
to django-...@googlegroups.com
#21711: Check for duplicate model names
----------------------------------------+-----------------------------
Reporter: aaugustin | Owner: nobody
Type: Bug | Status: new
Component: Core (Other) | Version: master
Severity: Normal | Keywords: app-loading
Triage Stage: Accepted | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
----------------------------------------+-----------------------------
(Extracted from #21681.)

`ModelBase.__new__` has an interesting behavior: it checks for a model
class with the target name in the app registry and return it instead of
creating a new class if found.

{{{
# myapp/models.py

from django.db import models

class MyModel(models.Model):
pass

first_model_class = MyModel # save a reference

class MyModel(models.Model):
pass

second_model_class = MyModel # save a reference

if second_model_class is first_model_class:
raise RuntimeError("WTF")
}}}

It would be better to raise an error in that case than silently return the
first model. See also #21679 which is essentially the same issue for
applications.

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

Django

unread,
Jan 1, 2014, 10:28:45 AM1/1/14
to django-...@googlegroups.com
#21711: Check for duplicate model names
------------------------------+------------------------------------

Reporter: aaugustin | Owner: nobody
Type: Bug | Status: new
Component: Core (Other) | Version: master
Severity: Normal | Resolution:

Keywords: app-loading | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------

Comment (by aaugustin):

This will likely be a problem for deferred queries.

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

Django

unread,
Jan 1, 2014, 11:37:48 AM1/1/14
to django-...@googlegroups.com
#21711: Check for duplicate model names
------------------------------+------------------------------------

Reporter: aaugustin | Owner: nobody
Type: Bug | Status: new
Component: Core (Other) | Version: master
Severity: Normal | Resolution:

Keywords: app-loading | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------

Comment (by akaariai):

We could cache the deferred classes in deferred_class_factory.

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

Django

unread,
Jan 1, 2014, 12:17:17 PM1/1/14
to django-...@googlegroups.com
#21711: Check for duplicate model names
------------------------------+------------------------------------

Reporter: aaugustin | Owner: nobody
Type: Bug | Status: new
Component: Core (Other) | Version: master
Severity: Normal | Resolution:

Keywords: app-loading | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------

Comment (by aaugustin):

Yes yes yes. In fact I'd like to avoid storing these models in the app
registry entirely.

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

Django

unread,
Jan 4, 2014, 2:33:25 PM1/4/14
to django-...@googlegroups.com
#21711: Check for duplicate model names
------------------------------+------------------------------------

Reporter: aaugustin | Owner: nobody
Type: Bug | Status: new
Component: Core (Other) | Version: master
Severity: Normal | Resolution:

Keywords: app-loading | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------

Comment (by aaugustin):

This will also prevent importing twice the same models through different
paths.

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

Django

unread,
Jan 5, 2014, 2:55:01 PM1/5/14
to django-...@googlegroups.com
#21711: Check for duplicate model names
------------------------------+------------------------------------
Reporter: aaugustin | Owner: nobody
Type: Bug | Status: closed

Component: Core (Other) | Version: master
Severity: Normal | Resolution: fixed

Keywords: app-loading | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------
Changes (by Aymeric Augustin <aymeric.augustin@…>):

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


Comment:

In [changeset:"f630373b929bc62bf4d66d60c532f7832e5fbe67"]:
{{{
#!CommitTicketReference repository=""
revision="f630373b929bc62bf4d66d60c532f7832e5fbe67"
Fixed #21711 -- Enforced unicity of model names.
}}}

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

Reply all
Reply to author
Forward
0 new messages