【发布时间】:2019-06-02 22:57:12
【问题描述】:
我的意见.py
@api_view(['POST'])
@permission_classes((AllowAny,))
@csrf_exempt
def transfer_tokens(request, domain):
"""
transfer tokens
"""
email = request.data['to_email']
# user_id = request.data['connected']
user = request.user
coins_to_be_transferred = request.data["coins"]
to_user = User.objects.get(email=email)
user_id = to_user.id
to_tuser = TenantUser.global_manager.get(user=user_id)
tenantuser = TenantUser.global_manager.get(email=user.email)
if to_user and user.kyc_done and to_user.kyc_done and coins_to_be_transferred >= 0:
if user.coins >= coins_to_be_transferred:
PoolHistory._default_manager.create(
tenant=tenantuser, coins=coins_to_be_transferred, loss=True)
user.coins = get_coins(tenantuser)
user.save()
PoolHistory._default_manager.create(
tenant=to_tuser, coins=coins_to_be_transferred, profit=True)
message = "You have received %s tokens from %s" % (coins_to_be_transferred, tenantuser.name)
notification = Notifications(user=to_user, message=message)
notification.save()
return Response({"detail": "Tokens have been transferred successfully.", "coins": user.coins}, status=200)
else:
return Response({"detail": "Your account has insufficient tokens to complete the transfer."}, status=400)
else:
if not coins_to_be_transferred >= 0:
return Response({"detail": "Tokens can't be transferred."}, status=400)
if not to_user.kyc_done:
return Response({"detail": "User with email isn't verified."}, status=400)
else:
return Response({"detail": "email doesn't exist."}, status=400)
【问题讨论】:
-
请尝试详细说明您要达到的目标。
-
Queryset.get()行为已记录在案 - 它应该返回一条记录,因此如果查找返回多条记录,它确实会引发(这显然是明智的做法 - ORM 将如何猜测您想要哪些记录?)。 IOW,仅将Queryset.get()用于保证最多返回一条记录的查找。另外,FWIW,如果没有找到匹配的记录,它会引发Model.DoesNotExist,所以你也必须处理这种情况。
标签: python django django-rest-framework