Reputation: 9484
It seems very simple to do nested serializer in Django REST.
But I can not find anything wrong in my code.carts does not shown up
I had followed http://www.django-rest-framework.org/api-guide/relations/#nested-relationships
Only one thing different is I use JSONField
.
It should not be a problem.
class MailAPIOrderItemSerializer(serializers.ModelSerializer):
product = serializers.SerializerMethodField()
category = serializers.SerializerMethodField()
variant = serializers.SerializerMethodField()
class Meta:
model = OrderItem
fields = ('category', 'product', 'variant')
def get_variant(self, obj: OrderItem):
return obj.product.get('level_two')
def get_category(self, obj: OrderItem):
return obj.product.get('service_name')
def get_product(self, obj: OrderItem):
return obj.product.get('product_name')
class MailAPIOrderSerializer(serializers.ModelSerializer):
...
carts = MailAPIOrderItemSerializer(many=True, read_only=True)
class Meta:
model = Order
fields = (
...
'carts'
)
def get_staff_name(self, order: Order):
return order.staff.full_name
class OrderItem(AbstractSoftModelController):
order = models.ForeignKey(Order, related_name='order_items', verbose_name=_('Order'))
product = JSONField(verbose_name=_('Product'))
My Temporal Solution:
Right now. I am working around by replacing
carts = serializers.SerializerMethodField()
And in the method I use
def get_carts(self, order: Order):
qs = order.order_items.all()
serializer = MailAPIOrderItemSerializer(qs, many=True)
return serializer.data
Upvotes: 0
Views: 53
Reputation: 47354
In model Order
you have backref field order_items
not carts
. So try change field name in MailAPIOrderSerializer
:
order_items = MailAPIOrderItemSerializer(many=True, read_only=True)
class Meta:
model = Order
fields = (
...
'order_items'
)
Upvotes: 1