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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

創(chuàng)建一個(gè) Viewset Mixin/Baseclass 來(lái)繼承 viewset-action

創(chuàng)建一個(gè) Viewset Mixin/Baseclass 來(lái)繼承 viewset-action

PHP
互換的青春 2023-11-09 16:58:57
我有一個(gè)網(wǎng)站,本質(zhì)上是我正在參與的 DnD 活動(dòng)的 wiki。因此,它包含有關(guān)生物、角色、位置等的文章。我想使用 Viewset 輕松訪問(wèn)它們,并希望使用 Viewset 操作(與自定義路由器一起)能夠查找單個(gè)記錄,而不是通過(guò) pk,而是通過(guò)各種查詢參數(shù)。我已經(jīng)有一些適用于此的東西,現(xiàn)在我想對(duì)其應(yīng)用一些繼承,以免重復(fù)自己。我想做的是這樣的:class WikiBaseViewset (viewsets.ModelViewSet):    detail_with_params_url_pattern_suffix: str    @action(detail=True, url_name="detail-params", url_path=detail_with_params_url_pattern_suffix)    def detail_through_params(self, request, **kwargs):        if self.detail_with_params_url_pattern_suffix == "":            raise InvalidViewsetURLException("URL of view 'detail_through_params' of WikiBaseViewset is not defined!")        model = self.serializer_class.Meta.model        instance = get_object_or_404(model, **kwargs)        serializer = self.get_serializer(instance)        return Response(serializer.data)class CharacterSerializer (serializers.HyperlinkedModelSerializer):    class Meta:        model = wiki_models.Character        fields = '__all__'class CharacterViewSet(WikiBaseViewset):    """Called with URLs: character, character/<str: name>"""    serializer_class = CharacterSerializer    queryset = wiki_models.Character.objects.all()    detail_with_params_url_pattern_suffix = "(?P<name__iexact>.+)"然而,我正在努力解決裝飾器絕對(duì)需要基類中的 URL 參數(shù)這一事實(shí)。否則,由于 NameError 抱怨未定義,代碼將無(wú)法編譯detail_with_params_url_pattern_suffix。如果您要在基類中進(jìn)行設(shè)置detail_with_params_url_pattern_suffix="",以便在編譯代碼時(shí)不出現(xiàn)錯(cuò)誤,那仍然沒(méi)關(guān)系,因?yàn)榈侥壳盀橹刮业膶?shí)驗(yàn)中的裝飾器仍然從 not 獲取該變量的WikiBaseViewset值CharacterViewSet。我如何重寫我的 BaseClass 才能使其正常工作?還有辦法嗎?
查看完整描述

1 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

對(duì)于這個(gè)問(wèn)題我沒(méi)有找到完全令人滿意的答案,但最終默許了這個(gè)解決方案,因?yàn)樗葟?fù)制粘貼更好。


您可能無(wú)法繼承視圖集操作,但您肯定可以繼承各個(gè)方法,然后在子級(jí)中覆蓋它們并在頂部拋出一個(gè)裝飾器。這導(dǎo)致了這個(gè)結(jié)構(gòu):


class WikiBaseViewset (viewsets.ModelViewSet):

    detail_with_params_url_pattern_suffix: str


    def detail_through_params(self, request, **kwargs):

        model = self.serializer_class.Meta.model

        instance = get_object_or_404(model, **kwargs)

        serializer = self.get_serializer(instance)

        return Response(serializer.data)



class CharacterSerializer (serializers.HyperlinkedModelSerializer):

    class Meta:

        model = wiki_models.Character

        fields = '__all__'



class CharacterViewSet(WikiBaseViewset):

    """Called with URLs: character, character/<str: name>"""

    serializer_class = CharacterSerializer

    queryset = wiki_models.Character.objects.all()


    @action(detail=True, url_name="detail-params", url_path="(?P<name__iexact>.+)")

    def detail_through_params(self, request, **kwargs):

        return super().detail_through_params(request, **kwargs)


查看完整回答
反對(duì) 回復(fù) 2023-11-09
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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