2017-05-08 3 views
0

자체 참조 외래 키가있는 Location 모델이 있습니다. 위치의 부모의 삭제에, 나는 그것의 조부모의 ID에 해당 parent_id,하지만 놀랍게도을 설정하려면, 다음과 같은 오류 name 'parent' is not defined가 발생합니다 :Django 삭제시 부모 값으로 외래 키 설정

class Location(Model): 
    parent = models.ForeignKey('self', models.SET(parent)) 

나는이 테이블에서 Colorado을 삭제한다면 :

| id | name  | parent_id | 
|----|----------|-----------| 
| 1 | USA  | NULL  | 
| 2 | Canada | NULL  | 
| 3 | Colorado | 1   | 
| 4 | Utah  | 1   | 
| 5 | Denver | 3   | 
| 6 | Boulder | 3   | 

I는 다음과 같이 그 결과를 원하는 것 :

| id | name  | parent_id | 
|----|----------|-----------| 
| 1 | USA  | NULL  | 
| 2 | Canada | NULL  | 
| 4 | Utah  | 1   | 
| 5 | Denver | 1   | 
| 6 | Boulder | 1   | 

답변

0

예 오류가 예상되면, models.SET 캘리포니아를 n 호출 가능하지만 아무런 인수도 허용하지 않으므로 삭제하려는 객체에 대한 액세스 권한이 없으므로 달성하려는 대상은

from django.dispatch.dispatcher import receiver 
from django.db.models.signals import post_delete 


@receiver(post_delete, sender=Location, 
      dispatch_uid='some.unique.string.id.for.location.delete') 
def location_post_delete_handler(sender, instance, **kwargs): 
    parent = instance.parent 
    Location.objects.filter(parent_id=instance.id).update(parent=parent) 
신호로 처리 할 수 ​​있습니다.