我正在开发一个使用Django 和 MongoDB作为我的数据库的 Web 项目(使用 MongoEngine 连接它们)。我必须创建 Celery 任务来清理旧用户帐户。一个月后我只需要清理没有任何内容的懒惰用户帐户(懒惰用户在他们第一次连接到网站时自动创建用户)。什么算作内容?来自用户的任何帖子或对任何帖子的评论。
我是这样做的,但如果可能的话,我想将其转换为查询:
def clean_inactive_lazy_users():
users_with_content = []
for post in api_models.Post.objects:
users_with_content.append(post.author)
for comment in post.comments:
users_with_content.append(comment.author)
users_with_content = list(set(users_with_content))
for user in account_models.User.objects:
if not user.is_authenticated() and (timezone.now() - user.connection_last_unsubscribe).days >= settings.DELETE_LAZY_USER_AFTER_DAYS and user not in users_with_content:
user.delete()
模型如下所示:
基础.py
class AuthoredEmbeddedDocument(mongoengine.EmbeddedDocument):
author = mongoengine.ReferenceField(models.User, required=True)
class AuthoredDocument(mongoengine.Document):
author = mongoengine.ReferenceField(models.User, required=True)
api_models:
from . import base
class Comment(base.AuthoredEmbeddedDocument):
"""
This class defines document type for comments on posts.
"""
class Post(base.AuthoredDocument):
"""
This class defines document type for posts.
"""
帐户模型:
class User(auth.User):
def is_authenticated(self):
return self.has_usable_password()
希望我提供了足够的信息,以便您可以帮助我解决问题。谢谢!