【问题标题】:`target` value is always None. How can we set `target` value to certain instance in Django Mode? (GetStream)`target` 值始终为 None。我们如何在 Django 模式下将 `target` 值设置为某个实例? (获取流)
【发布时间】:2017-12-19 16:53:46
【问题描述】:

这是我收到的通知,activities 目标始终为无。我们如何在模型中分配目标实例?

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

【问题讨论】:

    标签: getstream-io


    【解决方案1】:

    Target 是一个可选属性,可以在adding activities 时使用。因此,该属性始终包含在检索提要时返回的活动中。

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

    编辑:澄清一下,为了将“目标”字段作为 Activity 的一部分发送到 Stream,需要通过 extra_activity_data() 函数包含它。

    模型中自动包含的字段为 actorverbobjecttime,并显示在 Activity.create_activity() 函数中 (source)。

    【讨论】:

    • 但我无法在课堂上定义“目标”字段。 :( 它有目标的 object_id 和 content_type。目标有 @property 吗??
    • 我也尝试在评论模型上添加“目标”字段(如上),但目标总是返回无。
    • comment_instance.target 打印我想要的target 的实例。这很奇怪。
    • 我使用 extra_activity_data(self) 解决了这个问题!现在可以部署了。很棒的工作家伙!我喜欢 getStream
    【解决方案2】:

    我查找了 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
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      相关资源
      最近更新 更多