django rest framework:<objectname:objectname =“”object =“”>不是JSON可序列化的

时间:2017-03-07 07:43:58

标签: python django django-models django-rest-framework django-serializer

我有一个客户模型和一个事件模型。事件模型指的是客户。客户有很多活动。我的要求是当我得到客户时,我需要客户的最新事件对象。当我调用客户Get API时,它会显示以下错误,

  

/ api / v1 / customer

的TypeError      

不是JSON可序列化的

我的模特

Convert.ToInt32("1011", 2).ToString("X");

串行

class Customer(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=20, unique=True)
    #some more fields to go
    def __str__(self):
        return str(self.name)


    def latest_event_name(self):
        """Return latest event """

        latest_event = self.customer_events.order_by('-event_date').last()
        return latest_event if latest_event else None



class Event(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    event_name = models.CharField(max_length=200, unique=True)

    customer = models.ForeignKey(customer_models.Customer, db_index=True, on_delete=models.SET_NULL,
                                 related_name='customer_events', null=True)
   #some more fields to go

2 个答案:

答案 0 :(得分:2)

正在使用

中的事件
def latest_event_name(self): ...

您必须为Event模型创建序列化程序,因为该方法返回模型Event的实例。

我认为,如果你只是将事件的id作为str返回,那么你就不会遇到这个问题,因此你不必为事件模型创建一个seralizer。

答案 1 :(得分:0)

无论如何现在通过以下方法解决了问题。

def latest_event(self):
latest_event = self.customer_events.order_by('-event_date').last()
eventDict = None
if latest_event:
    eventDict = {"event_id": latest_event.id, "event_name": latest_event.event_name}
return eventDict

不确定它是否是正确的方法。