Django没有级联删除

joh*_* m. 6 python sql django

我越来越意识到我仍然是一个Django noob,我似乎无法弄清楚我的数据模型发生了什么,以及为什么它不是级联删除.这是我的模特.

class message(models.Model):
     msg_text = models.CharField(max_length = 9900)
     date_time = models.DateTimeField()
     is_read = models.BooleanField(default=False)


 class thread(models.Model):
     message = models.ForeignKey(message)
     subject = models.CharField(max_length=160)
     from_user = models.ForeignKey(User, related_name = 'from_user')
     to_user = models.ForeignKey(User, related_name = 'to_user')
     thread_id = models.CharField(max_length = 36)

def __unicode__(self):
    return self.subject
Run Code Online (Sandbox Code Playgroud)

然后这是我的删除功能

def delete_message(request, thread_id):
     t = thread.objects.get(id=thread_id)
     thread.objects.filter(thread_id = t.thread_id).delete()

     return HttpResponseRedirect(reverse("inbox.views.index"))
Run Code Online (Sandbox Code Playgroud)

因此每个线程都附加了消息,并且包含相关消息(即回复)的所有线程都与线程id相关,线程id是随机生成的字符串.因此,当我删除时,我获得初始线程ID(django自动生成的id),然后使用它来获取唯一的线程ID并删除包含该线程ID的所有条目.但是,当我删除该线程时,它不会自动级联并删除相关的消息对象.

奇怪的是它之前有效,但随后停止工作,我不太清楚为什么.有任何想法吗?

dam*_*nix 5

在Django 1.3版中,有一个on_delete参数,用于确定"ondelete"操作,例如:

def get_sentinel_user():
    return User.objects.get_or_create(username='deleted')[0]

class MyModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user))
Run Code Online (Sandbox Code Playgroud)

所以也许尝试:

class thread(models.Model):
     message = models.ForeignKey(message, on_delete=models.CASCADE)
     ...
Run Code Online (Sandbox Code Playgroud)

来源http://docs.djangoproject.com/en/1.3/ref/models/fields/