0

ユーザーがレコードを送受信するアプリケーションを設計しており、レコードにリストされているユーザーごとに削除を分けたいと考えています (あるユーザーの削除では、他のユーザーからレコードが隠されません)。

私の基本モデルの設計は次のようになります。

class BasePrivateMessage(TimeStampedModel):
    accepted = models.NullBooleanField(default=None, null=True, blank=True)
    # fields in question 
    archived_by_recipient = models.BooleanField(default=False)
    archived_by_sender = models.BooleanField(default=False)

    read = models.BooleanField(default=False,
                               help_text='Recipient has viewed.')
    recipient = models.ForeignKey('accounts.CommonUserProfile',
                              related_name='%(class)s_received')

    sender = models.ForeignKey('accounts.CommonUserProfile',
                               related_name='%(class)s_sent')
    message_body = models.TextField()

archived_by_xxxxフィールドを、レコードを非表示 (ソフト削除) したユーザーのリストを格納する役割を持つManyToManyFieldtoに置き換えると改善されますか? accounts.CommonUserProfileこれにより、クライアント側のコードが簡単になるようです。通常、論理的な削除はユーザーごとにどのように実装されますか?

4

1 に答える 1

1

これに対する一般的な業界標準のソリューションはないと思います。特定のアプリケーションで仕事を成し遂げられると思うことは何でもしてください。

私の理解では、あなたのメッセージは送信者と受信者だけが見ることができます。この場合、M2M フィールドを追加する理由はありません。追加の検索を行うために追加のリソースを使用するため、アプリケーションの速度が低下するだけです。ただし、多くのユーザーが 1 つのメッセージ (グループの会話など) を見ることができるようにアプリケーションを拡張する必要がある場合は、M2M フィールドを追加するのが理にかなっています。

肝心なのは、アプリケーションのニーズに合わせて何でもすることです。いつものように、抽象化 (柔軟性の向上) とパフォーマンスの間の妥協点です。

于 2013-12-11T00:35:44.417 に答える