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)