我已经将我的API列表视图设置为url'api /',并且我想将详细信息(RetrieveAPI)视图从url'api /'pk'/'更改为'api /'name'/名称是我模型中的一个字段。
我尝试了
的各种组合lookup_url_kwarg = 'name'
和
lookup_field = 'name'
在我的serializers.py和views.py中都,但是我得到404响应,或者URL仍然是api //。另外,如果该字段是字符串,我是否必须在URL中包括引号?任何见识都会很棒!
serializer.py:
class CountrySerializer(serializers.ModelSerializer):
class Meta:
model = Country
fields =('name', 'topLevelDomain', 'alpha2Code', 'alpha3Code', 'callingCodes',
'capital', 'altSpellings', 'region', 'subregion', 'population', 'latlng',
'demonym', 'timezones', 'borders', 'nativeName', 'numericCode',
'currencies', 'translations', 'flag', 'regionalBlocs', 'cioc')
lookup_field = 'name'
views.py:
class CountryListView(ListAPIView):
queryset = Country.objects.all()
serializer_class = CountrySerializer
class CountryDetailView(RetrieveAPIView):
queryset = Country.objects.all()
serializer_class = CountrySerializer
#lookup_url_kwarg = 'name'
url.py:
urlpatterns = [
path('', CountryListView.as_view()),
path('<name>/', CountryDetailView.as_view())
]
答案 0 :(得分:0)
您应该使用lookup_field
。验证/api/
是否显示国家/地区列表。然后尝试/api/<country_name>/
,其中country_name是Country
实例之一的名称。
class CountryDetailView(RetrieveAPIView):
queryset = Country.objects.all()
serializer_class = CountrySerializer
lookup_field = 'name'
class CountrySerializer(serializers.ModelSerializer):
class Meta:
model = Country
...
lookup_field = 'name'