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__'
我有一个名为 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__'