私は顧客モデルとイベントモデルを持っています。イベントモデルは顧客を参照します。顧客には多くのイベントがあります。私の要件は、顧客を取得するとき、私は顧客の最新のイベントオブジェクトが必要です。私は、顧客の取得APIを呼び出すと、それは次のようなエラーを示し、django rest framework:<Objectname:Objectname object>はJSONシリアライズ可能ではありません
TypeError at /api/v1/customer
<Event: Event object> is not JSON serializable
マイモデル
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'の残りのフィールドをリストしてください - そのうちの1つが直列化を妨げていることは明らかです。 – arvindch
ここで連載をしようとしていますか?あなたが 'CustomerEvent'インスタンスを取得した場合、それはどのようなものに直列化されますか? – Sayse
@shadow - DRFはクエリーセットの結果をシリアライズする方法がないので、シリアライズできない 'latest_event_name'です。 – Sayse