Reputation: 1182
Say I have a model with a Things table and a table of relationships between the things called ThingRelations. It should not be possible to delete a Thing when there are ThingRelations that point to it. This is how I'm trying to implement that:
from django.db import models
class ThingRelation(models.Model):
first_thing = models.ForeignKey('Thing', on_delete=models.PROTECT)
second_thing = models.ForeignKey('Thing', on_delete=models.PROTECT)
class Thing(models.Model):
name = CharField(max_length=260)
How do I automatically delete a Thing when there are no more ThingRelations pointing to it?
Upvotes: 1
Views: 229
Reputation: 3860
You have such options:
Command
and something like crontab
. Or it could be designed as a periodiq
routine. This way you can repeatedly select all Thing
models which have no relations with ThingRelation
.signals.py
action. This way when entry of ThingRelation
is deleted, you should check both the first_thing
and second_thing
in order to know whether the have any more ThingRelation
relations pointing to them.signal.py
solution, but on DB level.Which one should you choose? Depends on details of your exact objective. As for me, I use periodiq
option on simple cases and DB trigger if I aim on high performance.
Upvotes: 1