Django django-activity-stream sql "data"列不存在?



我使用django 1.5与https://github.com/justquick/django-activity-stream。我做了一个动作。发出像

action.send(request.user, verb="wrote", action_object=Message, target=Group)

并得到这个错误。下面是postgres日志:

2013-05-25 08:51:46 PDT ERROR:  column "data" of relation "actstream_action" 
does not exist at character 229
2013-05-25 08:51:46 PDT STATEMENT:  INSERT INTO "actstream_action" 
("actor_content_type_id", "actor_object_id", "verb", "description", 
"target_content_type_id", "target_object_id", "action_object_content_type_id", 
"action_object_object_id", "timestamp", "public", "data") VALUES (9, '2', 'wrote', NULL, 
14, '<property object at 0x25be3c0>', 22, '<property object at 0x25be3c0>', '2013-05-25 
15:51:46.693503+00:00', true, NULL) RETURNING "actstream_action"."id"

我相信代码执行的是:

def action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    from actstream.models import Action
    kwargs.pop('signal', None)
    actor = kwargs.pop('sender')
    check_actionable_model(actor)
    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=bool(kwargs.pop('public', True)),
        description=kwargs.pop('description', None),
        timestamp=kwargs.pop('timestamp', now())
    )
    for opt in ('target', 'action_object'):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, '%s_object_id' % opt, obj.pk)
            setattr(newaction, '%s_content_type' % opt,
                    ContentType.objects.get_for_model(obj))
    if settings.USE_JSONFIELD and len(kwargs):
        newaction.data = kwargs
    newaction.save()

操作模式:

class Action(models.Model):
    actor_content_type = models.ForeignKey(ContentType, related_name='actor')
    actor_object_id = models.CharField(max_length=255)
    actor = generic.GenericForeignKey('actor_content_type', 'actor_object_id')
    verb = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    target_content_type = models.ForeignKey(ContentType, related_name='target',
        blank=True, null=True)
    target_object_id = models.CharField(max_length=255, blank=True, null=True)
    target = generic.GenericForeignKey('target_content_type',
        'target_object_id')
    action_object_content_type = models.ForeignKey(ContentType,
        related_name='action_object', blank=True, null=True)
    action_object_object_id = models.CharField(max_length=255, blank=True,
        null=True)
    action_object = generic.GenericForeignKey('action_object_content_type',
        'action_object_object_id')
    timestamp = models.DateTimeField(default=now)
    public = models.BooleanField(default=True)
# below in models.py
if actstream_settings.USE_JSONFIELD:
    try:
        from jsonfield.fields import JSONField
    except ImportError:
        raise ImproperlyConfigured('You must have django-jsonfield installed '
                            'if you wish to use a JSONField on your actions')
    JSONField(blank=True, null=True).contribute_to_class(Action, 'data')

在action_handler中,它有newaction。数据= kwargs。为什么要将数据属性保存到db表中,如何防止这种情况?

可以删除

'USE_JSONFIELD': True

在settings.py中指定了ACTSTREAM_SETTINGS.

ACTSTREAM_SETTINGS = {
    # remove this
    'USE_JSONFIELD': True,
}

看起来你在Action模型中缺少了一个"data"字段。

或者——如果你不想这样,你需要删除这个:

  if settings.USE_JSONFIELD and len(kwargs):
    newaction.data = kwargs

为什么不创建一个数据字段,是一个json字段从https://github.com/bradjasper/django-jsonfield(或其他地方)?


这是你错过的,来自https://github.com/justquick/django-activity-stream/blob/master/actstream/models.py

if actstream_settings.USE_JSONFIELD:
    try:
        from jsonfield.fields import JSONField
    except ImportError:
        raise ImproperlyConfigured('You must have django-jsonfield installed '
                                'if you wish to use a JSONField on your actions')
    JSONField(blank=True, null=True).contribute_to_class(Action, 'data')

相关内容

最新更新