【发布时间】:2017-03-07 07:43:57
【问题描述】:
我有一个客户模型和一个事件模型。事件模型是指客户。一个客户有很多事件。我的要求是当我得到客户时,我需要客户的最新事件对象。当我调用客户Get API时,它显示以下错误,
/api/v1/customer 的类型错误
不是 JSON 可序列化的
我的模特
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
序列化器
class CustomerSerializer(serializers.ModelSerializer):
latest_event_name = serializers.ReadOnlyField()
class Meta:
model = Customer
fields = '__all__'
【问题讨论】:
-
列出
Event中的其余字段 - 显然其中之一正在阻止序列化。 -
你想在哪里进行序列化?如果你得到一个
CustomerEvent实例,它应该序列化成什么? -
@shadow - 它的
latest_event_name不可序列化,因为 DRF 不知道如何序列化查询集结果 -
latest_event_name = EventSerializer(read_only=True)是否符合您的要求? (您需要编写事件序列化程序) -
如果我在模型中使用
code return latest_event.event_name if latest_event else None,` 'latest_event_name = serializers.ReadOnlyField()' ` 将在序列化程序中工作。它将返回事件名称。但我需要完整的事件对象。
标签: python django django-models django-rest-framework django-serializer