Django Rest Framework, неправильно настроенное поле поиска - PullRequest
0 голосов
/ 11 марта 2019

Я получаю ошибку

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

Вот MWE:

urls.py:

from django.contrib import admin
from django.urls import include, path

from rest_framework import routers
from testproj import views

router = routers.DefaultRouter()
router.register(r'taxonomy', views.TaxonomyViewSet)
router.register(r'taxonomy-term', views.TaxonomyTermViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls))
]

models.py:

from django.db import models

class Taxonomy(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    slug = models.SlugField()

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Taxonomy"
        verbose_name_plural = "Taxonomies"

class TaxonomyTerm(models.Model):
    taxonomy = models.ForeignKey(
        "Taxonomy",
        on_delete=models.CASCADE,
        related_name="terms",
        related_query_name="term"
    )
    parent = models.ForeignKey(
        "self",
        on_delete=models.CASCADE,
        related_name="children",
        related_query_name="child",
        blank=True,
        null=True
    )
    name = models.CharField(max_length=255,)
    description = models.TextField()
    slug = models.SlugField(unique=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Term"
        verbose_name_plural = "Terms"

serializers.py:

from testproj.models import TaxonomyTerm, Taxonomy
from rest_framework import serializers

class TaxonomySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Taxonomy
        fields = ('name', 'description', 'slug')
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }


class TaxonomyTermSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = TaxonomyTerm
        fields = ('taxonomy', 'parent', 'name', 'description', 'slug')
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

views.py

from rest_framework import viewsets
from testproj.models import Taxonomy, TaxonomyTerm
from testproj.serializers import TaxonomySerializer, TaxonomyTermSerializer

class TaxonomyViewSet(viewsets.ModelViewSet):
    queryset = Taxonomy.objects.all().order_by('name')
    serializer_class = TaxonomySerializer
    lookup_field = 'slug'


class TaxonomyTermViewSet(viewsets.ModelViewSet):
    queryset = TaxonomyTerm.objects.all().order_by('name')
    serializer_class = TaxonomyTermSerializer
    lookup_field = 'slug'

Что на земле происходит? Я просмотрел много похожих вопросов и не вижу, чтобы совершал какие-либо обычные ошибки.

1 Ответ

1 голос
/ 11 марта 2019

TaxonomyTermSerializer не предоставляет lookup_field для гиперссылки parent и taxonomy.

Должно работать с:

class TaxonomyTermSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = TaxonomyTerm
        fields = ('taxonomy', 'parent', 'name', 'description', 'slug')
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'},
            'taxonomy': {'lookup_field': 'slug'},
            'parent': {'lookup_field': 'slug'},
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...