У нас есть объект Dialog и Comment.У нас есть денормализованное поле num_comments в диалоге, чтобы отслеживать количество комментариев.Когда новый комментарий сохраняется (или удаляется), мы хотим правильно увеличить / уменьшить это значение.
# sender=Comment, called post_save and post_delete
def recalc_comments(sender, instance, created=False, **kwargs):
# Comments that will be deleted might not have a dialog (when dialog gets deleted)
if not hasattr(instance, "dialog"):
return
dialog = instance.dialog
dialog.update(
num_comments = sender.public.filter(dialog=dialog).count(),
num_commentators = sender.public.filter(dialog=dialog).aggregate(c=Count('user', distinct=True))["c"],
)
Проблема, которая начала появляться, состоит в том, что запрос для num_comments возвращает ноль для первого опубликованного комментария.Это происходит не каждый раз, а только в случаях с aprox.> 1000 комментариев в наборе результатов (не так много, я знаю ...).
Может ли быть так, что комментарий еще не был сохранен в базе данных при выполнении count ()?Чтобы еще больше усложнить ситуацию, мы используем Johnny Cache (с memcached) в качестве слоя между ORM и базой данных.
Любая информация будет принята с благодарностью!