我正在基于oscar的Ecom平台上工作,并且在orderList
API中,我想要对象而不是URL。我是Django和oscar的新手。我怎样才能做到这一点?请帮助我。
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。我试图更改序列化器,但找不到有效的解决方案。