只返回一個對象:過濾用戶反向關係,並考慮到這些模型在Django的REST框架
class Product(models.Model):
name = CharField(max_length=255)
class Order(models.Model):
product = models.ForeignKey(Product)
user = models.ForeignKey(User)
quantity = models.PositiveIntegerField()
一個用戶只能有每個產品一個訂單對象。我想要一個API調用來顯示產品列表,以及用戶的訂購位置。有沒有辦法做到這一點?
默認序列化列出order_set
下的所有訂單。我確實有點超前與該用戶進行過濾:
class FilteredOrderSerializer(serialisers.ListSerializer):
def to_representation(self, data):
data = data.filter(user=self.context['request'].user)
return super(FilteredOrderSerializer, self).to_representation(data)
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
list_serializer_class = FilteredOrderSerializer
class ProductSerializer(serializers.ModelSerializer):
order_set = OrderSerializer(many=True, read_only=True)
class Meta:
model = Product
所以現在只顯示已驗證用戶的訂單,但由此產生的JSON看起來像
[
{
"name": "prod1",
"order_set": [
{
"quantity": 4
}
],
}
]
即場仍稱order_set
它是一個列表,我希望它被稱爲order
並且可以是一個對象或null。所以我不確定應該在哪裏進行過濾,也不知道如何定義該字段。
編輯:我使用一個簡單的視圖集中
class ProductViewSet(view sets.ReadOnlyModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
對於您的視圖,您需要一些相同的細節。 –
將以上視圖添加到 –
您的ProductSerializer的外觀如何?修復只在那裏。 –