2017-05-08 60 views
0

我有一個模型,Location帶有自引用外鍵。在一個位置的父的缺失,我想設置其parent_id其祖父母的ID,但是這並不奇怪,下面拋出錯誤name 'parent' is not definedDjango在刪除時將外鍵設置爲父值

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   | 

我想要的結果看起來像這樣:

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

回答

0

是預期的錯誤,models.SET CA n採取callable但它不接受參數因此問題仍然存在,因爲我們沒有訪問被刪除的對象,你試圖實現的可以通過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)