我試圖讓這個在「NUM_POSTS」博客中對象的字段遞減一次屬於該博客的一篇文章被刪除的時間,增加每次一個貼子創建。我能實現重載的保存方法很輕鬆地:Django的post_delete()信號處理程序不工作
def save(self, *args, **kwargs):
'''After saving a new post, increment the num_posts value in the
relevant blog.'''
super(Posts, self).save(*args, **kwargs)
self.blog_id.num_posts += 1
tmp = self.blog_id
tmp.save()
但無論出於何種原因,刪除帖子對象時的邏輯行不通。我通過在handlers.py
文件中信號的子模塊使用信號處理程序遵循最佳實踐。然後我導入子模塊在我ready()
方法在我TasksConfig(Appconfig)
方法apps.py
我似乎並沒有得到任何語法錯誤,或者在所有的任何錯誤。就有關博客的num_posts
場只是失敗遞減。下面是相關代碼:
從我handlers.py
:
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from webcomics.models import Pages, Posts, Blogs
@receiver(pre_delete, sender=Pages)
def handle_page_delete(sender, **kwargs):
obj = kwargs['instance']
if(obj != None):
tmp1 = obj.prev_id
tmp2 = obj.next_id
if(tmp1 != None):
tmp1.next_id = tmp2
obj.prev_id = None
if(tmp2 != None):
tmp2.prev_id = tmp1
obj.next_id = None
@receiver(pre_delete, sender=Posts)
def handle_bpost_delete(sender, **kwargs):
obj = kwargs['instance']
if(obj != None):
tmp = Blogs.objects.get(pk = obj.blog_id)
tmp.num_pages = tmp.num_pages - 1
從我apps.py
:
from django.apps import AppConfig
class WebcomicsConfig(AppConfig):
name = 'webcomics'
class TasksConfig(AppConfig):
name = 'tasks'
verbose_name = "Tasks"
def ready(self):
import binshellpress.webcomics.signals.handlers
而且,這裏是完整的帖子對象models.py
,以防萬一你們可以看到我失蹤的東西:
class Posts(models.Model):
title = models.CharField(max_length=180)
pub_date = models.DateTimeField('date publishied', default=timezone.now)
blog_id = models.ForeignKey('Blogs', on_delete=models.CASCADE)
series_id = models.ForeignKey('Series', on_delete=models.SET_NULL,
blank=True, null=True)
# Note: Vanilla TinyMCE Integration seems to be working. Need to
# modify the implementation to handle links, images, etc.
data = HTMLField()
def __str__(self):
return self.title
def save(self, *args, **kwargs):
'''After saving a new post, increment the num_posts value in the
relevant blog.'''
super(Posts, self).save(*args, **kwargs)
self.blog_id.num_posts += 1
tmp = self.blog_id
tmp.save()
我懷疑這是明顯的。我只是無所適從,因爲似乎沒有任何錯誤消息來自任何地方。
你們爲什麼試探,如果'kwargs [ 「實例」] == None'? 'pre_delete'信號總是通過一個實例,還是有一些嚴重的錯誤。 和'Blogs.num_posts'可以簡單地定義爲返回'self.pages_set.count一個屬性()'。這將比手動添加和減少更容易出錯。 –