0

私は Django をかなり使用しており、モデルにはかなり精通しています。ただし、GenericForeignKey および ContentTypes フレームワークに出くわしたばかりです。

これらを使用して、他のいくつかのモデルを参照する基本的な通知を保存する予定です。

たとえば、次のモデルがあります

class UserFollowers(models.Model): #Model to store which user follows others
    ...

class ContactShared(models.Model): #Model to store contact requests between users
    ...

1 人のユーザーによるこれらのアクションのそれぞれで、関係する他のユーザーが通知を受け取ります。Node サーバーと socket.io を使用して、これらのリアルタイムの側面を完成させました。ただし、現時点でオンラインでないユーザーに対してこれと同じ動作を実現するために、上記の汎用外部キーと ContentTypes に出会いました。

ここでの私の質問は、ドキュメントがこれについてあまり明確ではなかったため、これら2つの機能を使用してユーザーアクティビティを保存する方法を知りたいですか?

4

1 に答える 1

1

私は実際にはこれに慣れていませんが、以前にこれを少し使用したので、私の経験を GenericForeignKey と共有します。

基本的に、モデルでコンテンツ タイプと id フィールドを定義し、次に 3 番目のフィールドを組み合わせて、後で簡単に検索できるようにします。次のようにします。

class UserActivity(models.Model):
    activity_ct = models.ForeignKey(ContentType)
    activity_id = models.PositiveIntegerField()
    activity = generic.GenericForeignKey('activity_ct', 'activity_id')

保存/クエリするときは、次のようにします。

from django.contrib.contenttypes.models import ContentType

activity_obj = UserFollowers.objects.get(id=1)
activity_ct = ContentType.objects.get_for_model(activity_obj)
activity_create = UserActivity.objects.create(activity_ct=activity_ct, 
                                              activity_id=activity_obj.id)
activity_query = UserActivity.objects.filter(activity_ct=activity_ct,
                                             activity_id=activity_obj.id)

良い点は、UserActivity のアクティビティ オブジェクトをプルしたい場合は、単にactivity_obj.activity. それがまさにあなたの計画かどうかはわかりませんが、メカニズムは同じです。お役に立てれば。

于 2015-10-14T13:58:59.180 に答える