HyperLinkedModelSerializer: не удалось разрешить URL-адрес для связи с гиперссылкой, используя имя представления - PullRequest
0 голосов
/ 23 марта 2019

Я новичок в django и drf, и я пытаюсь настроить простой API для возврата представлений List и Detail модели "Personality. Я хочу, чтобы URL-адреса использовали поле slug вместо pk по умолчанию.

Работает нормально при использовании поля "pk" по умолчанию для разрешения URL, но когда я попытался использовать поле slug через lookup_field, я получаю следующую ошибку:

[ОШИБКА]'Неправильно сконфигурировано в / personal / Не удалось разрешить URL-адрес для связи с гиперссылкой, используя имя представления> "personal-detail". Возможно, вам не удалось включить связанную модель в> ваш API или неправильно настроен атрибут lookup_field в этом> поле.'

models.py:

class Personality(models.Model):
personality_name = models.CharField(
    "Influential Person", unique=True, max_length=100
)
slug = models.SlugField(blank=True, unique=True, max_length=100)
info = models.TextField("Information")
trivia = models.TextField("Trivia")

def __str__(self):
    return self.personality_name

def save(self, *args, **kwargs):
    if not self.id:
        self.slug = slugify(self.personality_name)

    super(Personality, self).save(*args, **kwargs)

views.py

class PersonalityViewSet(viewsets.ModelViewSet):

queryset = Personality.objects.all().order_by("id")
serializer_class = PersonalitySerializer
lookup_field = "slug"

serializers.py:

class PersonalitySerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(
    view_name="personality-detail", lookup_field="slug"
)

class Meta:
    model = Personality
    fields = ("pk", "personality_name", "url", "slug", "info", "trivia")
    read_only_fields = ("pk", "slug")
    # lookup_field = "slug"
    # extra_kwargs = {"url": {"lookup_field": "slug"}}

цитаты /urls.py

router = routers.DefaultRouter()
router.register(r"personality", views.PersonalityViewSet)
urlpatterns = [path("", include(router.urls))]

urls.py

urlpatterns = [
path("admin/", admin.site.urls),
path("", include("quotes.urls")),
path("api-auth", include("rest_framework.urls", namespace="rest_framework")),

]

...