使用 Django GenericForeignKey 存储基本通知

Use Django GenericForeignKey to store basic notifications

我经常使用 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
    ...

现在,对于一个用户的每个操作,另一个相关用户都会收到通知。我已经通过使用节点服务器和 socket.io 完成了这些的实时方面。但是,为了让目前不在线的用户实现同样的行为,我遇到了上面提到的通用外键和 ContentTypes。

我的问题是,由于文档对此不太清楚,我想知道如何使用这两个功能来存储用户活动?

我实际上是新手,但我以前用过一点,所以我只是分享我使用 GenericForeignKey 的经验。

基本上你想在模型中定义内容类型和 id 字段,然后是第三个字段来组合它们,以便你以后可以轻松地查找它,如下所示:

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

当你 save/query 时,你会这样做:

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 对象时,你可以直接 activity_obj.activity。我不确定这是否正是您的计划,但机制是相同的。希望这有帮助。