我已经使用了很多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完成了这些方面的实时方面。但是,为了对目前不在线的用户实现同样的行为,我遇到了上面提到的通用外键和内容类型。
我的问题是,由于文档对此不太清楚,我想知道如何使用这两个功能来存储用户活动?
答案 0 :(得分: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
。我不确定它是不是你的计划,但机制是一样的。希望这会有所帮助。