繁体   English   中英

如何将用户选择的 object 传递到另一个视图并从该 object 中检索特定列?

[英]How can I pass an object selected by the user, to another view and retrieve a specific column from that object?

我试图找出从用户正在查看的当前 object 中获取我的stock_list列中的值的最有效方法。

BucketDetail用于检索用户通过item = self.kwargs.get('pk')选择的特定 object

class BucketDetail(generics.RetrieveAPIView):
    permission_classes = [IsAuthenticated]
    serializer_class = BucketListSerializer
    queryset = Bucket.objects.all()

    def get_object(self, queryset=queryset, **kwargs):
        item = self.kwargs.get('pk')
        return get_object_or_404(Bucket, slug=item)

如何将 object 实例从BucketDetailBucketData视图,然后从当前 object 实例中获取列stock_list

class BucketData(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request, *args, **kwargs):
        stocks = Bucket.objects.get(stock_list)
        ...
        data = response.json()
        return Response(data, status=status.HTTP_200_OK)

以上是我到目前为止所拥有的, stocks = Bucket.objects.get(stock_list)不像我想的那样工作。

models.py

class Bucket(models.Model):

    category_options = (
        ('personal', 'Personal'),
        ('social', 'Social'),
    )


    class BucketObjects(models.Manager):
        def get_queryset(self):
            return super().get_queryset()

    ...
    slug = models.SlugField(unique=True, blank=True) 
    stock_list = ArrayField(models.CharField(max_length=6,null=True),size=30,null=True)
    ...


    objects = models.Manager()
    bucketobjects = BucketObjects()

    class Meta:
        ordering = ('-created',)

    def total_stocks_calc(self):
        self.stock_count = Bucket.objects.aggregate(Sum('stock_list', distinct=True))
        self.save()



您应该使用 model pk 或您独特的 slug 在您的BucketData视图中检索stock_list数据。 您还应该对数据使用序列化程序。 将您的 slug 或 pk 从 urls 文件传递到您的视图。 尝试这样的事情(代码未经测试,可以改进):

序列化器:

class StockListSerializer(ModelSerializer):
    stock_list = serializers.ListField(child=serializers.CharField())

    class Meta:
        model = Bucket
        fields = ("stock_list",)

看法:

class BucketData(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request, *args, **kwargs):
        slug = kwargs.get("slug")
        bucket_object = get_object_or_404(Bucket, slug=slug)
        serialzer = StockListSerializer(bucket_object.stock_list)
        return Response(serialzer.data, status=status.HTTP_200_OK)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM