django アクティビティ ストリームを使用してニュースフィードを作成しようとしています。対象のストリームを作っているのですが、保存しないコメントだとアクションオブジェクトが保存されません
"id": 14,
"actor": {
"id": 1,
"email": "zacmwangi94@gmail.com",
"first_name": "",
"last_name": ""
},
"verb": "commented on",
"action_object": null,
"target": {
"id": 6,
"venue": {
"id": 1,
"name": "IMAX",
"address": "NAIROBI",
"city": "NAIROBI",
"rating": "1.1"
},
"thumbnail": null,
"user": 1,
"event_pic_url": null,
"name": "A movie",
"time": "2017-11-11T16:02:00Z",
"description": "A description",
"event_type": "Movie",
"invite_only": true,
"free": false,
"age_restriction": true,
"ticket_price": 1000.0,
"created_at": "2017-03-19T10:35:41.723753Z"
}
}
アクション オブジェクトが写真の場合、適切に保存されます。これは私のコメントモデルです:
class Comment(models.Model):
user = models.ForeignKey(User)
text = models.TextField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
これは、コメントが作成された後にアクションを作成する方法です。
def comment_activity(sender, instance,created, **kwargs):
if created:
action.send(instance.user, verb='commented on', action_object=instance, target=instance.content_object)
post_save.connect(comment_activity, sender=Comment, dispatch_uid=comment_activity)
action.send
また、シグナルを使用してビューに保存しようとしましたAction.objects.create()
が、これらのアプローチはすべて失敗しました。
def create(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
comment = Comment.objects.create(**serializer.validated_data)
Action.objects.create(actor=comment.user,action_object=comment,verb="commented on",target=comment.content_object)
# action.send(request.user,action_object=comment,verb="commented on",target=comment.content_object)
return Response(
serializer.data, status=status.HTTP_201_CREATED
)
return Response({
'status': 'Bad request',
'message': 'Comment could not be created with received data.'
}, status=status.HTTP_400_BAD_REQUEST)
問題はコンテンツ タイプの使用に関係していますか? また、問題がある場合はどうすれば修正できますか?
false に設定FETCH_RELATIONS
してみましたが、何も変わりません。