У меня есть следующие модели с primary_key=True
указано:URL с точкой в Django Rest Framework
class Team(models.Model):
name = models.CharField(
max_length=64,
primary_key=True,
)
... other fields
Когда я сериализации эту модель, я делаю следующее:
class TeamSerializer(serializers.ModelSerializer):
class Meta:
model = Team
fields = ('url', 'name',) # and another fields
Мой Viewset:
class TeamViewSet(viewsets.ModelViewSet):
lookup_value_regex = '[-\w.]'
queryset = Team.objects.all()
serializer_class = TeamSerializer
filter_fields = ('name',) # and another fields
Мой urls.py:
router = routers.DefaultRouter()
router.register(r'teams', TeamViewSet)
urlpatterns = [
url(r'^api/', include(router.urls)),
# I am not sure if this url is right. I repeat of include(router.urls)
url(r'^api/teams/(?P<name>[-\w.]+)/', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
Затем, когда я создаю Team
объект с name
атрибутом, содержащих точками .
, например латиноамериканцы F.C. и я иду на отдых URL, я получаю:
Я не уверен в том, как использовать атрибут lookup_value_regex
в моем режиме просмотра. В this answer используется с некоторым основным регулярным выражением, но если я его использую, любой объект Team
доступен через мой сериализованный Rest API.
Как я могу получить URL-адрес как: /api/teams/Name.F.C.
в моей сериализованной модели Team
?
У меня есть «APPEND_SLASH = True» в моих настройках, но неудобно, что у меня есть то, что мой url не принимает точку '.' Идея, что я хочу, - это то, что в имени какой-то команды принимаем'. 'как часть строки. Поле пули принимает точки '.' действительно? Должен ли я объявлять поле слияния как primary_key для отображения в моем URL-адресе? ИЛИ уникально? – bgarcial
Нет, SlugField содержит только буквы, цифры, символы подчеркивания или дефисы. Но я не понимаю, зачем вам так много точек? Я бы предложил просто пропустить точки. Вам не нужно использовать поле пули в качестве первичного ключа, но вы можете, если хотите. Уникально, потому что вы хотите сделать поиск в этом поле. – opalczynski
Иногда название объекта Team может быть Barcelona F.C. Это означает, что пользователи могут вводить аббревиатуру F.C. от имени объекта Team. Я хочу разрешить этот случай. – bgarcial