[英]Django: how to retrieve an object selected by the ``object_detail`` generic view?
[英]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 实例从BucketDetail
到BucketData
视图,然后从当前 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.