无法序列化django信号中的模型对象
我有一个任务模型。保存任务后,我想向设备发送FCM。所以我决定使用django信号。下面是它的代码: 模型:无法序列化django信号中的模型对象,django,django-models,Django,Django Models,我有一个任务模型。保存任务后,我想向设备发送FCM。所以我决定使用django信号。下面是它的代码: 模型: class Task(models.Model): id = models.AutoField(primary_key=True) issuer = models.ForeignKey(EndUser, on_delete=models.CASCADE, related_name='history') assignee = models.ForeignKey(Me
class Task(models.Model):
id = models.AutoField(primary_key=True)
issuer = models.ForeignKey(EndUser, on_delete=models.CASCADE, related_name='history')
assignee = models.ForeignKey(Mechanic, on_delete=models.CASCADE, related_name='history')
vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE, related_name='history')
service = models.ForeignKey(Service, on_delete=models.CASCADE)
status = models.CharField('Task Status', choices=TASK_STATUS, default=TASK_STATUS[0][0], max_length=64)
payment_status = models.CharField('Payment Status', choices=PAYMENT_STATUS,
default=PAYMENT_STATUS[0][0], max_length=64)
def __str__(self):
return "{}-{}-{}".format(self.service, self.issuer, self.assignee)
post_save.connect(send_mechanic_notification, sender=Task)
信号功能:
def send_mechanic_notification(sender, instance, created, **kwargs):
if created:
instance.assignee.device.send_message(
title='New Task Available!',
body='Hey!! A new task is available for you',
data={
"event": "new_task",
"data": instance
}
)
现在,很明显这是行不通的,因为实例是一个模型对象,需要序列化。所以我尝试使用我定义的序列化程序。但这导致了循环依赖
我不想使用model_to_dict,因为它不会序列化嵌套字段,而序列化嵌套字段是一项要求
如何解决此问题?将序列化程序导入本地(函数内部)
def send_mechanical_通知(发送方、实例、已创建、**kwargs):
从某处。序列化程序导入MySerializer
如果创建:
instance.assignment.device.send_消息(
title='新任务可用!',
body='嘿!!你有一个新任务',
资料={
“事件”:“新任务”,
“数据”:实例
}
)
本地导入序列化程序(在函数内部)
def send_mechanical_通知(发送方、实例、已创建、**kwargs):
从某处。序列化程序导入MySerializer
如果创建:
instance.assignment.device.send_消息(
title='新任务可用!',
body='嘿!!你有一个新任务',
资料={
“事件”:“新任务”,
“数据”:实例
}
)
谢谢它奏效了……我现在在自嘲哈哈。很高兴它奏效了!!!请接受答案并点击向上投票按钮:)谢谢它成功了…我现在在嘲笑自己哈哈。很高兴它成功了!!!请接受答案并点击向上投票按钮:)
def send_mechanic_notification(sender, instance, created, **kwargs):
from somewhere.serializer import MySerializer
if created:
instance.assignee.device.send_message(
title='New Task Available!',
body='Hey!! A new task is available for you',
data={
"event": "new_task",
"data": instance
}
)