#16356 closed Bug (invalid)
Relationships in Django does not allow CASCADE delete
Reported by: | 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 (last modified by )
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:
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.
Change History (2)
comment:1 by , 14 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:2 by , 8 years ago
Description: | modified (diff) |
---|
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.