Как я могу выбрать экземпляр модели django, чтобы обновить информацию внутри этой модели или связанных с ней моделей?

У меня в основном три модели.

class Users(models.Model):
    name = models.CharField(max_length=100)
    ...
class Portfolio(models.Model):
    name = models.CharField(max_length=50)
    user = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='portfolio')
class BuySell(models.Model):
    portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE, related_name='buy_sell'
    ...

У каждого пользователя может быть несколько портфелей, а портфели могут иметь множество покупок-продаж. Из моего набора представлений как я могу получить доступ к экземпляру портфеля, выбранному пользователем, чтобы добавить данные о покупке-продаже?

В моем наборе представлений:

class BuySellViewSet(
        viewsets.GenericViewset, 
        mixins.ListModelMixin,
        mixins.CreateModelMixin,
        mixins.UpdateModelMixin,
        mixins.DestroyModelMixin
    ):
    
    serializer_class = BuySellSerializer
    queryset = BuySell.objects.all()
 
    def get_queryset(self):
        return self.request.user.portfolio

Но когда я добавляю несколько портфолио для одного пользователя, я получаю следующее сообщение об ошибке:

TypeError at /api/v1/share/buy-sell/
Field 'id' expected a number but got <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager object at 0x7f857c7c6940>.

Как я могу выбрать правильный экземпляр портфеля, чтобы добавить данные о покупке-продаже внутри этого экземпляра? Также, Как я буду добавлять новые записи о покупке-продаже в экземпляр портфеля из моего набора представлений?

def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        share = serializer.validated_data["share"]
        self.perform_create(serializer)
        return Response({"data": serializer.data}, status=status.HTTP_201_CREATED)

Вы можете фильтровать с помощью:

class BuySellViewSet(
        viewsets.GenericViewset, 
        mixins.ListModelMixin,
        mixins.CreateModelMixin,
        mixins.UpdateModelMixin,
        mixins.DestroyModelMixin
    ):
    
    serializer_class = BuySellSerializer
 
    def get_queryset(self):
        return BuySell.objects.filter(portfolio__user=self.request.user)
Вернуться на верх