![](/img/trans.png)
[英]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.