1 回答

TA貢獻2019條經驗 獲得超9個贊
對于這個問題我沒有找到完全令人滿意的答案,但最終默許了這個解決方案,因為它比復制粘貼更好。
您可能無法繼承視圖集操作,但您肯定可以繼承各個方法,然后在子級中覆蓋它們并在頂部拋出一個裝飾器。這導致了這個結構:
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)
- 1 回答
- 0 關注
- 159 瀏覽
添加回答
舉報