У меня есть эти модели, например (теперь носы имеют имена):
class Person(models.Model):
id = models.AutoField(primary_key=True)
class Nose(models.Model):
id = models.AutoField(primary_key=True)
owner = models.OneToOneField('Person', on_delete=models.CASCADE, primary_key=False, related_name='nose')
name = models.CharField(max_length=50, null=True, blank=True)
И у меня есть этот код, который удаляет нос человека (ужасный несчастный случай ...):
danny = Person()
danny.save()
# danny.nose would raise: {RelatedObjectDoesNotExist}Person has no nose.
nose = Nose(owner=danny, name='Big one')
nose.save()
# Now data in 'danny' is:
# "id" attribute: 1
# "nose" attribute: nose instance with name "Big one" and id 1
# danny.nose would return the nose instance
if hasattr(danny, 'nose'):
danny.nose.delete()
# After delete: data in 'danny':
# id = 1
# nose: nose instance with name "Big one" and id None
# danny.nose would return the nose instance with None id
danny_from_db = Person.objects.filter(id=1).first()
# data in danny_from_db: id = 1, no "nose" attribute - hasattr(danny, 'nose') would return False
# danny_from_db.nose would raise: {RelatedObjectDoesNotExist}Person has no nose.
Почему экземпляр Person
сохраняет этот атрибут Nose
с идентификатором None
после удаления его из БД?