我的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而不是保存到我自己的数据库的最佳方法是什么?
答案 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)