DRF ImproperlyConfigured: Не удалось разрешить URL-адрес для гиперссылки на отношения
Я искал много подобных вопросов здесь на stackoverflow и пробовал разные вещи, но ничего не помогло мне решить эту проблему. Возможно, кто-то заметит ошибку в моем коде, которую я не вижу. В общем, у меня есть ModelViewSet, и сначала я использовал ModelSerializer, и он работал просто отлично. Затем я подумал, что было бы удобно добавить url в мой сериализатор и поэтому я поместил HyperlinkedIdentityField в мой сериализатор и получил эту ошибку. Затем я попытался переключиться с ModelSerializer на Hyperlinked и все равно возникла эта ошибка. Вот код:
Serializer
from rest_framework.serializers import HyperlinkedModelSerializer, ModelSerializer, HyperlinkedIdentityField
from .models import Product, ProductCategory, Brand
class ProductSerializer(HyperlinkedModelSerializer):
url = HyperlinkedIdentityField(view_name='products:product-detail', lookup_field='pk')
class Meta:
model = Product
fields = ('id', 'url', 'name', 'category', 'brand', 'price', 'units_in_stock',
'units_on_order', 'reorder_point', 'discontinued')
Viewset
class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
Urls
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from products import views
app_name = 'products'
router = DefaultRouter()
router.register(r'products', views.ProductViewSet, basename='products')
router.register(r'categories', views.ProductCategoryViewSet, basename='categories')
router.register(r'brands', views.BrandViewSet, basename='brands')
urlpatterns = [
path('', include(router.urls)),
]
Модель
class Product(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey('ProductCategory', on_delete=models.DO_NOTHING)
brand = models.ForeignKey('Brand', on_delete=models.DO_NOTHING, blank=True, null=True)
price = models.FloatField()
units_in_stock = models.IntegerField()
units_on_order = models.IntegerField()
reorder_point = models.IntegerField()
discontinued = models.BooleanField(default=True)
def __str__(self):
return str(self.name)
def get_absolute_url(self):
return reverse('products:product-detail', kwargs={'pk': self.pk})