django модели - неверные данные после удаления атрибута - PullRequest
0 голосов
/ 23 января 2020

У меня есть эти модели, например (теперь носы имеют имена):

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 после удаления его из БД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...