Я новичок в 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")),
]