django отдых не показывает одну из конечных точек в API root - PullRequest
2 голосов
/ 18 июня 2020

enter image description hereenter image description here Один из наборов просмотра с именем «кошелек» не отображается на главной странице API. Я проверил маршрутизаторы, зарегистрированные в URL-адресах, но не обнаружил проблемы.

Модель SiteWallet:

class SiteWallet(models.Model):
    owner = models.OneToOneField(SiteUser, on_delete=models.CASCADE, related_name='SiteWallet')
    balance = models.DecimalField(max_digits=40, decimal_places=2, default=0 , blank=True, null=True)

    class Meta:
        verbose_name = 'Wallet'
        verbose_name_plural = 'Wallets'


    def __str__(self):
        return f"{self.owner} : {self.balance}$"

    def get_absolute_url(self):
        return reverse("Wallet_detail", kwargs={"pk": self.pk})

    def deposit(self, amount):
        self.balance += amount
        self.save()
        WalletTransaction.objects.create_deposit_transaction(self, amount)

    def withdraw(self, amount):
        if self.withdraw_valid(amount):
            self.balance -= amount
            self.save()
            WalletTransaction.objects.create_withdraw_transaction(self, amount)
        else:
            raise Exception("Not enough $")

    def withdraw_valid(self, amount):
        if self.balance >= amount:
            return True
        else:
            return False 

WalletSerializer:

class WalletSerializer(serializers.ModelSerializer):

    class Meta:
        model = SiteWallet
        fields = ['balance']

WalletViewSet:

class WalletViewSet(mixins.RetrieveModelMixin
                    ,viewsets.GenericViewSet):
"""endpoint for viewing the balance of wallet or charging it"""
    serializer_class = WalletSerializer
    permission_classes =[IsOwnerOrReadOnly]
    queryset = SiteWallet.objects.all()

    @action(detail=True, methods=['POST'])
    def charge_account(self, request):
        wallet = self.get_object()
        wallet.deposit(request.data['amount'])
        return Response(status=status.HTTP_200_OK)

    @action(detail=True, methods=['POST'])
    def withdraw(self, request):
        wallet = self.get_object()
        wallet.withdraw(request.data['amount'])
        return Response(status=status.HTTP_200_OK)

и URL-адреса приложения:

router = routers.DefaultRouter()
router.register(r"Users", SiteUserViewSet, basename="Site Users")
router.register(r"Wallet", WalletViewSet, basename="wallets")
router.register(r"Bank accounts", BankAccountViewSet, basename="bank account")
router.register(r"Wallet transaction", WalletTransactionViewSet, basename='wallet transaction')

urlpatterns =[
    path('login/', views.LoginView.as_view(), name='login'),
    path('logout/', views.LogoutView.as_view(), name='logout')
] + router.urls

Я новичок в Django, если какая-либо часть кода написана плохо или нуждается в рефакторинге, я был бы признателен за совет .

...