Django rest框架获取一对多关系数据

Django rest框架获取一对多关系数据,django,django-models,django-rest-framework,django-serializer,Django,Django Models,Django Rest Framework,Django Serializer,我有一个名为Event的django模型,它引用了Customer模型 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) event_l

我有一个名为
Event
的django模型,它引用了
Customer
模型

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)
event_location = models.CharField(max_length=200, default='')
event_date = models.DateField()
我需要获得客户列表以及API中每个用户的最新事件名称

Customer serializers.py文件为

class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = '__all__'
Customer views.py文件为

class CustomerViewSet(viewsets.ModelViewSet):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer

如何实现这一点?

在您的
客户
模型中,您可以拥有一个
属性
,该属性返回客户实例的最新事件名称:

class Customer(models.Model):
    ...

    @property
    def latest_event_name(self):
        """Return latest event name."""

        # self.customer_events.order_by('event_date').last()
        latest_event = self.customer_events.order_by('-event_date').first()

        return latest_event.event_name if latest_event else None 
然后,您可以在序列化程序中为
最新事件\u名称添加
只读字段

class CustomerSerializer(serializers.ModelSerializer):

    latest_event_name = serializers.ReadOnlyField()

    class Meta:
        model = Customer
        fields = '__all__'