我越来越意识到我仍然是一个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的所有条目.但是,当我删除该线程时,它不会自动级联并删除相关的消息对象.
奇怪的是它之前有效,但随后停止工作,我不太清楚为什么.有任何想法吗?
在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/
| 归档时间: |
|
| 查看次数: |
12026 次 |
| 最近记录: |