Почему я получаю 'detail: not found' для первичного ключа, отформатированного как '12 -345.78'? - PullRequest
0 голосов
/ 21 октября 2019

Когда я пытаюсь отобразить подробную информацию, например, /api/products/12-345.67/, я получаю detail: Not found. в качестве ответа. Как видите, идентификаторы товара отформатированы как 12-345.67. Моим первым подозреваемым был валидатор RegEx (приведенный ниже), но он работает одинаково с ним или без него.

Модель, сериализаторы, наборы представлений и URL-адреса определяются следующим образом:

# models.py:
class Product(models.Model):
   product_id = models.CharField(max_length=9, primary_key=True)
   name = models.CharField(max_length=40)
   is_active = models.BooleanField(default=True)

   def __str__(self):
       return self.product_id

# serializers.py:
class ProductSerializer(serializers.ModelSerializer):
   product_id = serializers.RegexField(regex='^\d{2}-\d{3}\.\d{2}$', max_length=9, min_length=9, allow_blank=False)
   name = serializers.CharField(min_length=6, max_length=50, allow_blank=False)

   class Meta:
      model = Product
      fields = '__all__'

class ProductViewSet(viewsets.ModelViewSet):
   queryset = Product.objects.all()
   serializer_class = ProductSerializer
   lookup_field = 'product_id'

# urls.py:
router = routers.DefaultRouter()

router.register(r'products', ProductViewSet, basename='products')
(...)

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

1 Ответ

1 голос
/ 21 октября 2019

Я не думаю, что у вас должны быть полные остановки (.) в ваших конечных точках API. Вероятно, измените id на что-то другое. & Запразамы: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...