Django REST API получить только данные пользователя auth

Я новичок в Django, пытаюсь сделать REST API. Сейчас столкнулся с одной проблемой. Я создал 2 модели Account & Transaction

class Account(models.Model):
    id = models.UUIDField(default=uuid.uuid4, unique=True,primary_key=True,editable=False)
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    account_name = models.CharField(max_length=100)

Счет имеет ForeignKey с моделью пользователя

class Transaction(models.Model):
    id = models.UUIDField(default=uuid.uuid4(),primary_key=True,editable=False)
    account = models.ForeignKey(Account,on_delete=models.CASCADE,related_name='account')
    transaction_no = models.CharField(default=str(uuid.uuid4())[:8],max_length=100)

Транзакция имеет ForeignKey с моделью Account. затем получаю JWT токен и передаю API. В view.py я фильтрую по запрашиваемому пользователю

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def getAccount(request,pk):
    account = Account.objects.filter(user=request.user).get(id=pk)
    serializer = AccountSerializer(account, many=False)
    return Response(serializer.data)

теперь как отфильтровать транзакцию только по аутентификации User

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def getTransactions(request,account_id):
    transactions = Transaction.objects.filter(account=account_id)
    serializer = TransactionSerializer(transactions, many=True)
    return Response(serializer.data)

Вы фильтруете с:

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def getTransactions(request):
    transactions = Transaction.objects.filter(account__user=request.user)
    serializer = TransactionSerializer(transactions, many=True)
    return Response(serializer.data)

Здесь мы таким образом извлекаем Transaction, для которых account ссылается на объект Account с request.user как user.


Note: It is normally better to make use of the settings.AUTH_USER_MODEL [Django-doc] to refer to the user model, than to use the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.

Вернуться на верх