2017-12-18 120 views
1

这里是我得到的通知,并且activities目标始终为无。我们如何在Model中分配目标实例?`target`值始终为无。我们如何在Django模式中将`target`值设置为某个实例? (GetStream)

{'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 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> ...),...} 

回答

2

Target是可以adding activities时使用的可选属性。出于这个原因,该属性总是包含在检索提要时返回的活动中。

如果您正在使用Django模型中的字段,您应该能够简单地在模型上定义“目标”字段(可能是键入一个CharField)。

编辑:澄清,为了具有送入流作为活动的一部分的“目标”字段,它需要通过extra_activity_data()功能被包括在内。

从模型自动包括的字段有actorverbobjecttime并在Activity.create_activity()函数(source)中所示。

+0

但我无法在类中定义“目标”字段。 :(它有object_id和content_type的目标。是否有任何@property的目标? –

+0

另外我试图添加“目标”字段上的评论模型(如上),但目标总是返回None。 –

+0

comment_instance.target打印的实例我想要'target',这很奇怪 –

0

我抬头看了getStream Activity类,并没有办法通过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 

谢谢!

相关问题