Django rest framework 获取一对多关系数据

Django rest framework get one to many relationship data

我有一个名为 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 中每个用户的最新事件名称。

客户 serializers.py 文件是

class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = '__all__'

客户views.py文件是

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

我怎样才能做到这一点?

在您的 Customer 模型中,您可以有一个 property returns 客户实例的最新事件名称:

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 

在您的序列化程序中,您可以为 latest_event_name 添加一个 ReadOnlyField:

class CustomerSerializer(serializers.ModelSerializer):

    latest_event_name = serializers.ReadOnlyField()

    class Meta:
        model = Customer
        fields = '__all__'