{{{
class RemoteIdentifierToLocal(models.Model):
remote_id = models.UUIDField(primary_key=True)
local_object_content_type = models.ForeignKey(ContentType)
local_object_object_id = models.PositiveIntegerField()
local_object = GenericForeignKey(ct_field='local_object_content_type',
fk_field='local_object_object_id')
}}}
which is used as follows:
{{{
if guid is not None:
local_object =
RemoteIdentifierToLocal.objects.get(remote_id=guid).local_object
}}}
To my surprise, we found a case where `guid` was not-None, and
`local_object` was None.
This was traced back to the implementation of `GenericForeignKey`
containing a try/except-pass:
https://github.com/django/django/blob/master/django/contrib/contenttypes/fields.py#L241
(now)
https://github.com/django/django/commit/bca5327b21eb2e3ee18292cbe532d6d0071201d8
#diff-cc83843e623c1ab07a24317073330058R62 (initial commit, 11 years ago)
Now, apparently this has been this way for 11 years already, so must be
the "correct" behaviour. However I have not found any documentation of
this fact, and would (myself) expect the attribute-access to *do* raise an
exception or warning of some sort.
--
Ticket URL: <https://code.djangoproject.com/ticket/28613>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* component: contrib.contenttypes => Documentation
* stage: Unreviewed => Accepted
* type: Uncategorized => Cleanup/optimization
Comment:
There's
[https://github.com/django/django/blob/6da140724dba546d2f3aced1308e617747b0385c/tests/generic_relations/tests.py#L398-L401
one assertion] in Django's test suite that fails with the exception
catching removed. I doubt it's appropriate to raise a warning for properly
working code (assuming the test represents a valid use case -- I didn't
study it in much detail). Accepting at least as a documentation
enhancement.
--
Ticket URL: <https://code.djangoproject.com/ticket/28613#comment:1>
* owner: nobody => Harshit Jain
* status: new => assigned
Comment:
I would like to document this. Can you tell me where do I need to add
this?
--
Ticket URL: <https://code.djangoproject.com/ticket/28613#comment:2>
* has_patch: 0 => 1
Comment:
The Documentation has been added. Here is the link to the pull request -
[https://github.com/django/django/pull/9181].
--
Ticket URL: <https://code.djangoproject.com/ticket/28613#comment:3>
* needs_better_patch: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/28613#comment:4>
Comment (by Tim Graham <timograham@…>):
In [changeset:"1a82fc245eb8ac4b131ec02a6ac3e112deb8d5a6" 1a82fc2]:
{{{
#!CommitTicketReference repository=""
revision="1a82fc245eb8ac4b131ec02a6ac3e112deb8d5a6"
Fixed #28613 -- Doc'd the return value for GenericForeignKey when the
related object is deleted.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/28613#comment:6>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"f9a01d40d5610276cad6b6dc08a27f3030030e2d" f9a01d40]:
{{{
#!CommitTicketReference repository=""
revision="f9a01d40d5610276cad6b6dc08a27f3030030e2d"
[2.0.x] Fixed #28613 -- Doc'd the return value for GenericForeignKey when
the related object is deleted.
Backport of 1a82fc245eb8ac4b131ec02a6ac3e112deb8d5a6 from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/28613#comment:5>