`target`值始终为无。我们如何在Django模式中将`target`值设置为某个实例? (GetStream)

这里是我得到的通知,并且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> ...),...}

回答:

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

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

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

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

回答:

我抬头看了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

谢谢!

以上是 `target`值始终为无。我们如何在Django模式中将`target`值设置为某个实例? (GetStream) 的全部内容, 来源链接: utcz.com/qa/261296.html

回到顶部