"""V2
"""
from typing import Any
from django.contrib.auth.models import User
from app_models.models import UserExtra, UserAsset
from app_models.models import Category, Product, UserOrder, Warehouse, Supplier
from rest_framework import serializers
from rest_framework import viewsets
# User serializer and ModelViewSet
[文档]class UserSerializer(serializers.HyperlinkedModelSerializer):
[文档]class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
# Product serializer and ModelViewSet
[文档]class ProductSerializer(serializers.ModelSerializer):
[文档]class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
# Category
[文档]class CategorySerializer(serializers.ModelSerializer):
[文档]class CategoryViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
# UserOrder
[文档]class UserOrderSerializer(serializers.ModelSerializer):
[文档]class UserOrderViewSet(viewsets.ReadOnlyModelViewSet):
queryset = UserOrder.objects.all()
serializer_class = UserOrderSerializer
# Warehouse
[文档]class WarehouseSerializer(serializers.ModelSerializer):
[文档]class WarehouseViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Warehouse.objects.all()
serializer_class = WarehouseSerializer
# Supplier
[文档]class SupplierSerializer(serializers.ModelSerializer):
[文档]class SupplierViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Supplier.objects.all()
serializer_class = SupplierSerializer
# UserExtra, UserAsset
# 这两个one-to-one的信息,和User一起显示出来
from django.core.exceptions import ObjectDoesNotExist
[文档]class FulluserSerializer(serializers.ModelSerializer):
"""显示用户的完整信息 User & UserExtra & UserAsset
Arguments:
weixin_openid: UserExtra / weixin_openid
phone: UserExtra / phone
qq: UserExtra / qq
balance: UserAsset / balance
"""
weixin_openid = serializers.SerializerMethodField('get_userextra_weixin_openid')
phone = serializers.SerializerMethodField('get_userextra_phone')
qq = serializers.SerializerMethodField('get_userextra_qq')
balance = serializers.SerializerMethodField('get_userasset_balance')
[文档] def get_userasset_balance(self, instance):
user = instance
try:
return user.userasset.balance
except ObjectDoesNotExist as e:
return '还没有用户资产,需要登录一次才会有哦 😀'
[文档]class FulluserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all().order_by('id')
serializer_class = FulluserSerializer
# UserExtra, UserAsset