第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何創(chuàng)建一個視圖來檢索 url 中具有匹配主鍵的所有對象?

如何創(chuàng)建一個視圖來檢索 url 中具有匹配主鍵的所有對象?

慕標琳琳 2022-01-11 16:11:28
我有兩個模型形成一對多的關(guān)系。一個托盤有多個與之關(guān)聯(lián)的圖像。模型.pyclass Pallet(models.Model):    pallet_id = models.IntegerField(primary_key=True)    def __str__(self):        return str(self.pallet_id)    class Meta:        ordering = ('pallet_id',)class Image(models.Model):    created = models.DateTimeField(auto_now_add=True)    pallet = models.ForeignKey(Pallet, on_delete=models.CASCADE)    image = models.FileField(upload_to="")    def __str__(self):        return str(self.created)我正在嘗試創(chuàng)建一個視圖,在該視圖中我從 url 獲取與特定托盤 ID 關(guān)聯(lián)的所有圖像。序列化程序.pyclass ImageSerializer(serializers.HyperlinkedModelSerializer):    pallet = serializers.PrimaryKeyRelatedField(many=True, read_only=True)    class Meta:        model = Image        fields = '__all__'class PalletSerializer(serializers.ModelSerializer):    class Meta:        model = Pallet        fields = '__all__'網(wǎng)址.pyurlpatterns = [    url(r'^pallets/', include([        url(r'^(?P<pk>[0-9]+)/$', views.PalletDetail.as_view(), name='pallet-detail'),        ])),]我認為問題出在帶有 PalletDetail 類的 views.py 中。我對如何根據(jù) URL 中的主鍵編寫視圖感到困惑。我嘗試使用 **kwargs['pk'] 但使用它是否使它成為基于函數(shù)的視圖?如果是這樣,混合基于類和基于函數(shù)的視圖會是不好的形式嗎?如何從基于類的視圖中獲得類似的行為?我真的很掙扎這里的觀點:視圖.pyclass PalletDetail(generics.RetrieveUpdateDestroyAPIView):    queryset = Image.objects.prefetch_related('pallet').all()    serializer_class = ImageSerializer
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

你的做法是錯誤的。您想要返回屬于托盤的圖像列表,因此您需要的是圖像的列表視圖,而不是托盤詳細信息視圖。網(wǎng)址應(yīng)如下所示:


/pallets/<pallet_id>/images/

通過這種方式,url 是自描述的,根據(jù) REST 標準,您可以輕松地看到您正在請求屬于托盤而不是托盤本身的圖像


在urls.py


urlpatterns = [

    url(r'^pallets/', include([

        url(r'^(?P<pallet_pk>[0-9]+)/images/$', views.PalletImagesListView.as_view(), name='pallet-images-list'),

        ])),

]

在視圖中,您必須覆蓋該get_queryset()方法,以便它只返回指定托盤的圖像


class PalletImagesListView(generics.ListAPIView):

    serializer_class = ImageSerializer


    def get_queryset(self):

        return Image.objects.prefetch_related('pallet').filter(pallet__pk=self.kwargs.get('pallet_pk'))

所以現(xiàn)在你可以請求第一個托盤的圖像 /pallets/1/images/


查看完整回答
反對 回復(fù) 2022-01-11
?
紅顏莎娜

TA貢獻1842條經(jīng)驗 獲得超13個贊

您正在使用序列化程序并以錯誤的方式查看。


您的PalletDetail觀點的問題是您使用了錯誤的查詢集。Pallet查詢集應(yīng)返回對象,因為查找將在該查詢集上進行(默認查找字段為“pk”)。此外,您將需要使用序列化程序,Pallet因為它應(yīng)該處理Pallet對象的數(shù)據(jù)。


class PalletDetail(generics.RetrieveUpdateDestroyAPIView):

    queryset = Pallet.objects.all()

    serializer_class = PalletSerializer


查看完整回答
反對 回復(fù) 2022-01-11
?
白板的微信

TA貢獻1883條經(jīng)驗 獲得超3個贊

在基于函數(shù)的視圖中 傳遞 pk 參數(shù) 示例:

def Example_function(request, pk):
    queryset = Model.objects.filter(id=pk)

在基于類的視圖中 獲取 url 參數(shù)

pk = self.kwargs.get('pk')
queryset = Model.objects.filter(id=pk)


查看完整回答
反對 回復(fù) 2022-01-11
  • 3 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號