Code

Opened 3 years ago

Closed 3 years ago

#16356 closed Bug (invalid)

Relationships in Django does not allow CASCADE delete

Reported by: eguevara2012@… Owned by: nobody
Component: Database layer (models, ORM) Version: 1.3
Severity: Normal Keywords: relationship
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Hello!
I've been through this ticket alert that Django relationships are wrong.
A simple example:
An owner has an address.
A house has an address.

The classes would be:

class Owner(models.Model):

address = models.ForeignKey(Address)
#or better
# address = models.OneToOneField(Address)


class House(models.Model):

address = models.ForeignKey(Address)
#or better
# address = models.OneToOneField(Address)

class Address(models.Model):

street = models.CharField(max_length=100)
number = models.IntegerField(default=0)

This is the correct mapping following the logic of object-orientation, but this mapping does not allow remove related objects by CASCADE.
According to the Django doc, the mapping is inverse:

class Owner(models.Model):

#other fields

class House(models.Model):

#other fields

class Adress(models.Model):

street = models.CharField(max_length=100)
number = models.IntegerField(default=0)
owner = models.ForeignKey(Owner)
house = models.ForeignKey(House)

The big problem is that this mapping in the form of owner the address form is shown with a select of houses, and in the form of owner is shown a form address with a select of owners.
Look, I want to register an owner and his address, this is end of the registration.
After i want register a house, register your address and there can select the owner to associate home with owner.

I urge to carefully read the Hibernate reference manual to understand how relationships should be made in Django:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-association

I would like to examine this problem because i can not remove an owner and remove the house and address by CASCADE, and remove a house and its address by CASCADE using my firts example for mapping class.

Regards.

Attachments (0)

Change History (1)

comment:1 Changed 3 years ago by aaugustin

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

I urge you to read Django's documentation to understand how Django works and clear any confusion with other frameworks :)

More seriously, you have 1-to-1 relations, so you can put the Foreign Key in either model. Depending on the side of the relation where you put the Foreign Key, deletes will cascade or not. This is a SQL modeling issue, it isn't particularly related to Django.

This tracker is appropriate to report bugs in Django. "Django doesn't work like Hibernate" isn't a bug. For general usage questions, please join #django on FreeNode or post to the django-users mailing list.

Last edited 3 years ago by aaugustin (previous) (diff)

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.