Как я могу выбрать экземпляр модели 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)