2016-06-17 2 views
1

관련 개체의 delete()이 즉시 삭제하지 않는다는 것을 알고 있습니다. 필자의 경우 Vader 인스턴스는 instance 매개 변수를 통해 serializer의 update 메서드 매개 변수를 전달합니다.개체 삭제 방법 (즉시)

즉시 v.son을 어떻게 삭제합니까?

class Vader(models.Model): 
    pass 

class Luke(models.Model): 
    dad = models.OneToOneField(Vader, related_name='son') 

>>> v = Vader() 
>>> hasattr(v, 'son') 
False 
>>> l = Luke(dad=v) 
>>> l.save() 
>>> hasattr(v, 'son') 
True 
>>> v.son 
<Luke: Luke object> 
>>> v.son.delete() 
>>> hasattr(v, 'son') 
True 
>>> v.son 
<Luke: Luke object> 

답변

3

데이터베이스의 삭제는 즉시 수행되지만 이미로드 된 모델 인스턴스에는 반영되지 않습니다. 이것은 django가 HTTP처럼 작동하기 때문에 일반적으로 문제가되지 않습니다 - 요청이 들어오고, 어떤 처리가 발생하면 상태가 손실됩니다.

변경 사항을 확인하기 위해 데이터베이스에서 다시로드 모델을 강제 할 수 있습니다 :이 작동하지 않았다

v.refresh_from_db() 
+0

. 나는'v = Vader.objects.get (id = v.id)'를해야만했다. 이것이 OneToOne 관계로 할일이 있는지 궁금합니다. 'refresh_from_db()'는'Vader' 테이블을 질의 한 반면'.get()'은 모든'OneToOne' 관련 테이블을 질의했습니다. –

+0

그냥'.delete()'다음에'v.son'이 계속'Luke' 객체 인 것을 추가하면'id' 만 None이됩니다. 이 방법은'.refresh_from_db()'후에도 그대로 유지됩니다. –

+0

나는 hasattr (v, 'son') 및 v.son.id'에 대한 검사를 확장했습니다. 거기에 데이터베이스 쿼리가 없습니다. –