让Django将save()建模为firebase而不是数据库

时间:2016-03-09 10:00:56

标签: python django firebase

我的models.py中有以下模型,我想用它来保存聊天消息到firebase,所以它没有打到我自己的数据库。我在处理程序中使用post_save信号。

class FirebaseMessage(models.Model):
    chatbox = models.ForeignKey(ChatBox, related_name='msgs', db_index=True)
    created_on = models.DateTimeField(auto_now=True, db_index=True)
    message = models.CharField(max_length=1000)

    @property
    def firebase_key(self):
        m_identifier = str(self.id)
        return 'sub_messages/%s/' % (m_identifier)

    class Meta:
        managed = False

我的handlers.py:

@receiver(post_save, sender=FirebaseMessage, dispatch_uid='s.chatmessage_handler')
def chatmessage_handler(sender, instance, created, **kwargs):
    serializer = ChatMessageSerializer(instance)
    message_endpoint = ''.join(instance.firebase_key)
    client.patch(message_endpoint, serializer.data)

我已经尝试覆盖FirebaseMessage中的save()方法但是它没有保存到两者,可能是因为post_save没有发出信号。将对象保存到firebase而不是保存到我自己的数据库的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你不需要在这里监听任何事件,因为你想完全排除数据库保存功能。因此,只需将chatmessage_handler功能移至model.save()方法即可。

这样的事情应该可以解决问题。

def save(self, *args, **kwargs):
    serializer = ChatMessageSerializer(self)
    message_endpoint = ''.join(self.firebase_key)
    client.patch(message_endpoint, serializer.data)