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
    ...

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

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

4

1 回答 1

1

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

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

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 回答