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__'