Я работаю на платформе Ecom на базе Oscar, и в orderList
API мне нужен объект вместо URL.Я новичок в Джанго и Оскар.Как я могу это сделать?Пожалуйста, помогите мне.
class OrderList(generics.ListAPIView):
serializer_class = OrderSerializer
permission_classes = (IsOwner,)
def get_queryset(self):
qs = Order.objects.all()
data=[]
for q in list(qs):
print(q)
return qs.filter(user=self.request.user)
и его сериализатор:
class OrderSerializer(OscarHyperlinkedModelSerializer):
"""
The order serializer tries to have the same kind of structure as the
basket. That way the same kind of logic can be used to display the order
as the basket in the checkout process.
"""
owner = serializers.HyperlinkedRelatedField(
view_name='user-detail', read_only=True, source='user')
lines = serializers.HyperlinkedIdentityField(
view_name='order-lines-list')
shipping_address = InlineShippingAddressSerializer(
many=False, required=False)
billing_address = InlineBillingAddressSerializer(
many=False, required=False)
payment_url = serializers.SerializerMethodField()
offer_discounts = serializers.SerializerMethodField()
voucher_discounts = serializers.SerializerMethodField()
def get_offer_discounts(self, obj):
qs = obj.basket_discounts.filter(offer_id__isnull=False)
return OrderOfferDiscountSerializer(qs, many=True).data
def get_voucher_discounts(self, obj):
qs = obj.basket_discounts.filter(voucher_id__isnull=False)
return OrderVoucherOfferSerializer(qs, many=True).data
def get_payment_url(self, obj):
try:
return reverse('api-payment', args=(obj.pk,))
except NoReverseMatch:
msg = "You need to implement a view named 'api-payment' " \
"which redirects to the payment provider and sets up the " \
"callbacks."
warnings.warn(msg)
return msg
class Meta:
model = Order
fields = overridable('OSCARAPI_ORDER_FIELD', default=(
'number', 'basket', 'url', 'lines',
'owner', 'billing_address', 'currency', 'total_incl_tax',
'total_excl_tax', 'shipping_incl_tax', 'shipping_excl_tax',
'shipping_address', 'shipping_method', 'shipping_code', 'status',
'guest_email', 'date_placed', 'payment_url', 'offer_discounts',
'voucher_discounts')
)
Мне нужен объект в сериализаторе, но вместо этого он дает мне URL.Я попытался изменить сериализатор, но не нашел работающего решения.