2017-05-08 19 views
0

私は自己参照外部キーを持つモデルLocationを持っています。場所の親の削除時に、私はそのparent_idその祖父母のIDに設定したいのですが、驚くことではないが、次はエラーname 'parent' is not definedスロー:私はこのテーブルからColoradoを削除した場合Django削除時に外部キーを親値に設定する

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

を:

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

私は結果は次のようになりたいです:

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

答えて

0

はいエラーが予想され、models.SETカリフォルニア州n呼び出し可能にしても引数を受け付けないので、削除しようとしているオブジェクトにアクセスできないため、問題は残ります。post_deleteシグナルで処理することができます:

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) 
関連する問題