Uhm, your fix fixes the problem at the wrong end. This can and should be supported by the database's native capabilities. This would be the ticket for it: http://code.djangoproject.com/ticket/7539
But I like your imagination, or is there more truth behind your story than you'd admit? Cheers, Florian Apolloner On Apr 5, 8:06 pm, Kevin howerton <kevin.hower...@gmail.com> wrote: > Hi. > > So I came across a use-case for wanting to delete content (which > django doesn't really handle exactly to my liking). I just got back > from a vacation in vegas and noticed in a drunken stupor I had posted > some pictures on my blog that should I really shouldn't have > (http://i.imgur.com/5oj15.jpgSFW). > > Anyhow, currently django's only delete behavior (to my knowledge) is > to delete all objects related from a reverse relation. I think it > would be preferable to actually delete only objects that have NOT NULL > **and** no default set. > > Right now clear() sort of fills some of the void for what you need to > do prior to deleting an object, but it fails to handle DEFAULT > conditions. > > I realize changing the default behavior of the delete() method is > probably out of the question... and there are a bunch of tickets open > asking for cascades and what-not, that will hopefully one day fill the > void. clear(), however, *should* handle DEFAULTS in the same way it > handles null=True. > > Also, I wrote a mix-in class that fixes the delete method to work as I > believe it should... for those of you with similar use-cases. Anyone > have any feedback on it? > > ps. I didn't really murder a hooker in vegas (I don't even have a > blog), just felt that I should provide a relevant use-case ;) > > from django.db.models.fields import NOT_PROVIDED > from django.contrib import admin > > class ClearOnDelete(models.Model): > def delete(self): > related_objects = self._meta.get_all_related_objects() > for object in related_objects: > accessor_name = object.get_accessor_name() > related_accessor = getattr(self.__class__, accessor_name) > related_accessor_instance = getattr(self, accessor_name) > > if related_accessor.related.field.default is not > NOT_PROVIDED: > for relation in related_accessor_instance.all(): > setattr(relation, > related_accessor.related.field.name, > related_accessor.related.field.default) > relation.save() > elif related_accessor.related.field.null: > for relation in related_accessor_instance.all(): > setattr(relation, > related_accessor.related.field.name, None) > relation.save() > super(ClearOnDelete, self).delete() > > class Meta: > abstract = True -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.