我基本上有三个模特。
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)发布于 2022-07-14 17:49:10
您可以通过以下方式进行过滤:
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)https://stackoverflow.com/questions/72984667
复制相似问题