私はデータベースとしてDjangoとMongoDBを使用してWebプロジェクトに取り組んでいます(MongoEngineを使用してそれらを接続しています)。古いユーザーアカウントをクリーンアップするためにCeleryタスクを作成する必要があります。1か月後にコンテンツのない怠惰なユーザーアカウントのみをクリーンアップする必要があります(怠惰なユーザーは、最初にWebサイトに接続したときに自動的に作成されたユーザーです)。コンテンツとして何がカウントされますか?ユーザーからの投稿または投稿へのコメント。
私はこのようにしましたが、可能であればこれをクエリに変換したいと思います。
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()
モデルは次のようになります。
base.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.
"""
account_models:
class User(auth.User):
def is_authenticated(self):
return self.has_usable_password()
うまくいけば、私はあなたが問題で私を助けることができるように十分な情報を提供しました。ありがとう!