Установка подробного API View в str вместо pk с помощью Django - PullRequest
0 голосов
/ 26 октября 2018

У меня в представлении списка API задан URL 'api /', и я хочу изменить представление сведений (RetrieveAPI) с URL 'api /' pk '/' на 'api /' name '/ where имя это поле в моей модели.

Я пробовал различные комбинации

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())
]

1 Ответ

0 голосов
/ 26 октября 2018

Вы должны использовать 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'
...