Не удалось разрешить URL для связи с гиперссылкой, используя имя представления «Сведения о настройках» - PullRequest
0 голосов
/ 14 марта 2019

Я часами пытался отладить проблему.Я не смог понять, как настроить HyperlinkedModelSerializer.

Не могли бы вы указать мне, что я делаю неправильно?Кроме того, есть ли хороший учебник по пониманию гиперссылок лучше, чем официальные документы?Спасибо!

Ошибка

Неправильно настроен в / settings / Не удалось разрешить URL-адрес для связи с гиперссылкой, используя имя представления «Сведения о настройках».Возможно, вам не удалось включить связанную модель в ваш API или неправильно настроить атрибут lookup_field в этом поле.

.....

Во время обработки вышеуказанного исключения (обратноедля "Подробной информации о настройках" с аргументами ключевых слов "{'settings_id': UUID ('24aee4eb-8f71-4336-8c36-a96c9e4447c9')}" не найден. 1 образец (-ы) пробовал: ['settings // $']),произошло другое исключение:

models.py

class Settings(models.Model):
    # General
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    createdAt = models.DateTimeField(auto_now_add=True)
    updatedAt = models.DateTimeField(auto_now=True)

    # Token
    publicToken = models.CharField(max_length=100)
    secretToken = models.CharField(max_length=100)

serializers.py

class SettingsListSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(
        view_name = "Settings Detail",
        lookup_field='id',
        lookup_url_kwarg='settings_id'
    )

    class Meta:
        model = Settings
        exclude = ('id', 'createdAt', 'updatedAt',)

class SettingsDetailSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Settings
        exclude = ('id','createdAt', 'updatedAt',)

urls.py

from django.conf.urls import url
from app import views

urlpatterns = [
    url(r'^$', views.HomeView.as_view(), name=views.HomeView.name),
    url(r'^settings/$', views.SettingsListView.as_view(), name=views.SettingsListView.name),
    url(r'^settings/<uuid:settings_id>/$', views.SettingsDetailView.as_view(), name=views.SettingsDetailView.name),
]

просмотров.py

class SettingsListView(generics.ListCreateAPIView):
    queryset = Settings.objects.all()
    serializer_class = SettingsListSerializer
    permission_classes = (IsAuthenticated,)
    name = "Settings List"

class SettingsDetailView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = SettingsDetailSerializer
    permission_classes = (IsAuthenticated,)
    name = "Settings Detail"

    def get_queryset(self):
        id = self.kwargs.get(self.lookup_url_kwarg)
        setting = Settings.objects.filter(id=id)
        return setting
...