I have one Django model that points to another one with a OneToOneField,
sort of like this:

class Target(models.model):
    # stuff

class Source(models.Model):
    target = models.OneToOneField(Target)

Sometimes, given an object that is an instance of Target, I want to
navigate to its Source and delete that:

try:
    some_target.source.delete()
except ObjectDoesNotExist:
    ## nothing to delete!
    pass

But this doesn't work: some_target.source will still exist after the
delete() operation has been performed.  If I try "some_target.source =
None", I get an exception, complaining that Target.source does not allow
null values.  Calling save() and clean_fields() at strategic moments
doesn't seem to work, either.

What does seem to work is reloading the Target object:

try:
    some_target.source.delete()
    some_target = Target.objects.get(pk=some_target.id)
except Source.DoesNotExist:
    ## nothing to delete!
    pass

Is this a bug in Django, or am I misunderstanding how related or cached
objects are supposed to work?

This is Django 1.2.3, Python 2.6.5, PostgreSQL 8.4.7, all running on
Ubuntu Linux 10.04.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to