`target` 值始终为 None。我们如何在 Django 模式下将 `target` 值设置为某个实例? (获取流)
`target` value is always None. How can we set `target` value to certain instance in Django Mode? (GetStream)
这是我收到的通知,activities
目标始终是 None。我们如何在模型中分配目标实例?
{'id': '6a4e1d107c07b2c7',
...,
'activities': [
EnrichedActivity(activity_data={'id': '6a4e1d18-e3b8-11e7-8080-80007c07b2c7', 'to': ['notification:1'], 'time': datetime.datetime(2017, 12, 18, 5, 58, 5, 508124), 'foreign_id': 'comment.Comment:22', 'object': <Follow: johnmatt3 : jbaek7023>, 'actor': <User: johnmatt3>,
'target': None, <-- ALWAYS None. Why?
'verb': 'follow', 'origin': None}, not_enriched_data={}),
EnrichedActivity(activity_data={'id': '62b0e89c-e3b8-11e7-8080-80017680d313', 'to': ['notification:1'], 'time': datetime.datetime(2017, 12, 18, 5, 57, 52, 733814), 'foreign_id': 'follow.Follow:21', 'object': <Follow: jbaek7023433 : jbaek7023>, 'actor': <User: jbaek7023433>, 'target': None, 'verb': 'follow', 'origin': None}, not_enriched_data={})],
'is_seen': True, 'verb': 'comment'},
这里是评论class。我猜会有一定的 属性 来设置 'target'
class Comment(models.Model, Activity):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='follower')
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
target = GenericForeignKey('content_type', 'object_id')
@property
def activity_notify(self):
SomeModel = self.content_type.model_class()
...
return []
我需要特定的 属性,它可以处理 target
应该处理的实例。比如...
@property
def activity_target_attr(self): # this is not working
print('test')
target = blah blah
return target
# expected output...
# {id... activities: [EnrichedActivity(
# 'id': ..., 'target': <Outfit 32> ...),...}
Target
是可选的 属性,可以在 adding activities 时使用。因此,属性 始终包含在检索提要时返回的活动中。
如果您希望在 Django 模型中使用该字段,您应该能够简单地在模型上定义 "target" 字段(可能是 CharField 类型)。
Edit:澄清一下,为了将 'target' 字段作为 Activity 的一部分发送到 Stream 中,需要通过extra_activity_data()
函数。
模型中自动包含的字段是 actor
、verb
、object
和 time
,并显示在 Activity.create_activity()
函数中(source).
我查了getStream Activity class 没有办法传递target
实例。
就我而言,我想传递目标的内容类型及其 ID。
@property
def extra_activity_data(self):
SomeModel = self.content_type.model_class()
object_id = self.object_id
qs = SomeModel.objects.filter(id=self.object_id)
if qs:
dict_object = '%s:%s' % (self.content_type, self.object_id)
return {'target_address': dict_object}
return None
谢谢!
这是我收到的通知,activities
目标始终是 None。我们如何在模型中分配目标实例?
{'id': '6a4e1d107c07b2c7',
...,
'activities': [
EnrichedActivity(activity_data={'id': '6a4e1d18-e3b8-11e7-8080-80007c07b2c7', 'to': ['notification:1'], 'time': datetime.datetime(2017, 12, 18, 5, 58, 5, 508124), 'foreign_id': 'comment.Comment:22', 'object': <Follow: johnmatt3 : jbaek7023>, 'actor': <User: johnmatt3>,
'target': None, <-- ALWAYS None. Why?
'verb': 'follow', 'origin': None}, not_enriched_data={}),
EnrichedActivity(activity_data={'id': '62b0e89c-e3b8-11e7-8080-80017680d313', 'to': ['notification:1'], 'time': datetime.datetime(2017, 12, 18, 5, 57, 52, 733814), 'foreign_id': 'follow.Follow:21', 'object': <Follow: jbaek7023433 : jbaek7023>, 'actor': <User: jbaek7023433>, 'target': None, 'verb': 'follow', 'origin': None}, not_enriched_data={})],
'is_seen': True, 'verb': 'comment'},
这里是评论class。我猜会有一定的 属性 来设置 'target'
class Comment(models.Model, Activity):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='follower')
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
target = GenericForeignKey('content_type', 'object_id')
@property
def activity_notify(self):
SomeModel = self.content_type.model_class()
...
return []
我需要特定的 属性,它可以处理 target
应该处理的实例。比如...
@property
def activity_target_attr(self): # this is not working
print('test')
target = blah blah
return target
# expected output...
# {id... activities: [EnrichedActivity(
# 'id': ..., 'target': <Outfit 32> ...),...}
Target
是可选的 属性,可以在 adding activities 时使用。因此,属性 始终包含在检索提要时返回的活动中。
如果您希望在 Django 模型中使用该字段,您应该能够简单地在模型上定义 "target" 字段(可能是 CharField 类型)。
Edit:澄清一下,为了将 'target' 字段作为 Activity 的一部分发送到 Stream 中,需要通过extra_activity_data()
函数。
模型中自动包含的字段是 actor
、verb
、object
和 time
,并显示在 Activity.create_activity()
函数中(source).
我查了getStream Activity class 没有办法传递target
实例。
就我而言,我想传递目标的内容类型及其 ID。
@property
def extra_activity_data(self):
SomeModel = self.content_type.model_class()
object_id = self.object_id
qs = SomeModel.objects.filter(id=self.object_id)
if qs:
dict_object = '%s:%s' % (self.content_type, self.object_id)
return {'target_address': dict_object}
return None
谢谢!