Opened 8 years ago

Last modified 8 years ago

#26585 closed Bug

Cascade-deletion through generic foreign keys ignores field names — at Initial Version

Reported by: Adam Nickle Owned by: nobody
Component: contrib.contenttypes Version: 1.8
Severity: Normal Keywords: genericforeignkey delete
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Create three models:

from django.db import models
from django.contrib.contenttypes import generic
class Location(models.Model):
    address_line1 = models.CharField()

class Account(models.Model):
    acct_number = models.CharField()

class Link(models.Model):
    account = models.ForeignKey(Account)
    linked_object_id = models.PositiveIntegerField()
    linked_object_content_type = models.ForeignKey(ContentType)
    linked_object = generic.GenericForeignKey('linked_object_content_type', 'linked_object_id')

With this setup, deleting a Location object will attempt to cascade-delete any associated Link objects. In doing so, Django ignores the parameters to the GenericForeignKey field constructor and instead expects the content type to be in a field called content_type and the object id in object_id. This prevents cascade deletion through generic foreign keys from working whenever these fields aren't named as expected or whenever there are multiple generic foreign keys in a model.

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top