ブログオブジェクトの '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()
メソッドの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() 'を返すプロパティとして定義できます。これは、手動での加算と減算よりもエラーが発生しにくいでしょう。 –