2013-05-25 34 views
0

我使用django 1.5和https://github.com/justquick/django-activity-stream。我做了一個action.send像Django django-activity-stream sql「data」列不存在?

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.data = kwargs。爲什麼數據屬性被保存到數據庫表中,我該如何防止這種情況?

回答

0

它看起來像是缺少Action模型中的「數據」字段。

或者 - 如果你不想這樣,你需要刪除此:

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

爲什麼不創建一個數據字段是一個JSONField從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') 
+0

是的,我知道這一點,但我認爲這是故意的,因爲這是它在https://github.com/justquick/django-activity-stream – Derek

+0

K,THX具體的方式,將盡 – Derek

+0

看起來它需要django-jsonfield,實際上:https://github.com/justquick/django-activity-stream/blob/master/example_project/requirements.txt – ariddell

1

你可以刪除行

'USE_JSONFIELD':真

在你的settings.py你已經指定了ACTSTREAM_SETTINGS。

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