'i want to post data to Bonus field from a function made from the random choice of list elements

I am trying to make an api for a wheel which rotates and we get a random reward so i am using list and random function. I want to save the data in the Bonus field from the function corresponds to random choice if else condition. I have tried this.

models.py

class Wallet(models.Model):
    user = models.ForeignKey(User, null=True, related_name='wallet_mobile', on_delete=models.CASCADE)
    total_amount = models.FloatField(_('Total amount'), default=10)
    add_amount = models.FloatField(_('Add amount'), default=0)
    deposit_cash = models.FloatField(_('Full Add amount'),default=0)
    win_amount = models.FloatField(default=0)
    winning_cash = models.FloatField(default=0)
    withdraw_amount = models.FloatField(default=0)
    amount = models.DecimalField(_('amount'), max_digits=10, decimal_places=2, default=10)
    description = models.CharField(max_length=200, null=True, blank=True)
    Recieved_sreferral  = models.CharField(max_length=200, null=True, blank=True)
    referral_status = models.BooleanField(null=True, blank=True)
    Bonus = models.FloatField(default=0)

serializer.py

class Bonusserializer(serializers.ModelSerializer):
    class Meta:
        model = Wallet
        fields = ['Bonus']

views.py

@api_view(['POST'])
def bonus_money(request, pk):
    if request.method == 'POST':
        qs = Wallet.objects.get(pk=pk)
        serializer = Bonusserializer(qs, data=request.data)
        if serializer.is_valid(raise_exception=True):
            Bonus = request.data['Bonus']
            li = ['5 Rs. Entry ticket','Get Another Spin','50 Rs Bonus', '10% Discount Coupon','20% Extra Referral Bonus','5 Rs Bonus','Better luck next time','10 Rs Bonus']
            x = random.choice(li)            
            if x == li[0]:
                qs.Bonus = qs.Bonus + 5
                qs.save()
            elif x == li[1]:
                y = 'Get Another Spin'
                return y
            elif x == li[2]:
                qs.Bonus = qs.Bonus + 50
                qs.save()
            elif x == li[3]:
                y = "10% Discount Coupon"
                return y
            elif x == li[4]:
                y = "Better luck next time"
                return y
            elif x == li[5]:
                qs.Bonus = qs.Bonus + 5
                qs.save()
            elif x == li[6]:
                y = "Better luck next time"
                return y
            elif x == li[7]:
                qs.Bonus = qs.Bonus + 10
                qs.save()
            obj = Wallet.objects.create(wallet=qs,Bonus = qs.Bonus)
            obj.save()
        json_data = serializer.data
        x = GetResponceSerializer(json_data)
        x = {**x.data, **json_data}
        return JsonResponse(x, status=status.HTTP_200_OK, safe=False)
    else:
        return JsonResponse({"status": False, "message": "Something went wrong. Please try again later", },
                            status=status.HTTP_400_BAD_REQUEST)    

Please ignore the y variable strings. I will change them later to floatfield type results.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source