2017-03-16 13 views
1

내 사용자가 ., -, _, ñ 사이의 다른 문자와 같은 문자로 생성 될 수 있음 그들의 username 필드는 primary_key=True,입니다.Django Rest Framework - ".", "-", "_"문자로 된 필드 사용자 이름

가 내 관심의 username 분야와 관련,이 방법의 내 사용자 지정 사용자 (AbstractBaseUser)를 정의 :

class UserSerializer(serializers.ModelSerializer): 
    username = serializers.CharField(validators=[UniqueValidator(queryset=User.objects.all(), message='Lo sentimos, existe un fichaje con este nombre de usuario')]) 
    email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all(), message='Lo sentimos, alguien ya ha sido fichado con este correo electrónico')]) 

    class Meta: 
     model = User 
     fields = ('url', 'username', 'password', 'first_name','last_name', 
        'age','other fields ...',) 

내 UserViewSet가 있습니다 :

class User(AbstractBaseUser, PermissionsMixin): 

    username = models.CharField(
     _('username'), 
     max_length=30, 
     primary_key=True, 
     unique=True, 
     help_text=_('Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.'), 
     validators=[ 
      RegexValidator(
       r'^[\[email protected]+-]+$', 
       _('Enter a valid username. This value may contain only ' 
        'letters, numbers ' 'and @/./+/-/_ characters.') 
      ), 
     ], 
     error_messages={ 
      'unique': _("A user with that username already exists."), 
     }, 
    ) 
    email = models.EmailField(max_length=254, unique=True) 
    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['username'] 
    objects = UserManager() 

UserSerializer 것은 이것이다 다음 :

class UserViewSet(viewsets.ModelViewSet): 
    """ 
    API endpoint that allows users to be viewed or edited. 
    """ 
    queryset = User.objects.all().order_by('-date_joined') 
    serializer_class = UserSerializer 
    filter_fields = ('username', 'is_player', 'first_name', 'last_name', 'team' , 'email',) 

내가 테 username 분야에서 bacalao.cevichica 같은 예를 들어 . 문자를 가진 사용자를 만들 때 R은 urls.py

router = routers.DefaultRouter() 
router.register(r'users', UserViewSet) 

이 방법 OG의 정의, 사용자가 생성되지만 나는 localhost:8000/api/users/

I에 갈 때 나는 매우 친숙하고 있지 않다

File "/home/bgarcial/.virtualenvs/fuupbol2/lib/python3.5/site-packages/django/urls/resolvers.py", line 392, in _reverse_with_prefix 
    (lookup_view_s, args, kwargs, len(patterns), patterns) 
django.urls.exceptions.NoReverseMatch: Reverse for 'user-detail' with arguments '()' and keyword arguments '{'pk': 'bacalao.cevichica'}' not found. 2 pattern(s) tried: ['api/users/(?P<pk>[^/.]+)\\.(?P<format>[a-z0-9]+)/?$', 'api/users/(?P<pk>[^/.]+)/$'] 

enter image description here

:이 메시지 정규 표현을 사용하면 RegexValidator이 제대로 형성되지 않았을 가능성이 있습니까?

또한 내 문제는 UserSerializer 또는 UserViewSet 일 수 있습니다.

이 주제를 명확히하지 않은 순간 모든 방향을 높이 평가합니다. :)

+1

: URL이 될해야하는지 기본 키의 형식을 알 수 있도록 ([^./]) 제외 ./ 문자

이 이

당신은 당신의 뷰셋에 lookup_value_regex를 추가 할 수있는 기본 정규식 때문입니다 패턴은 마침표를 지원하지 않습니다. 평문에서 사용하는 정규식을 포함 할 수 있습니까? – TankorSmash

+0

@TankorSmash 이론에서 RegexValidator ( r '^ [\ w. @ + -] + $', _ ('이 사용자는 유효한' '문자, 숫자' '및 @ /./+/-/_ 문자') ),'모델 사용자 ...의 사용자 이름 입력란에? 사과드립니다. 정규 표현식을 가진 초보자입니다. – bgarcial

답변

2

오류를 보면 일부 URL과 일치했지만 실패했습니다. 그것은 단지 URL 같은 소리

class UserViewSet(viewsets.ModelViewSet): 
    """ 
    API endpoint that allows users to be viewed or edited. 
    """ 
    lookup_value_regex = '[\[email protected]+-]+' 
    queryset = User.objects.all().order_by('-date_joined') 
    serializer_class = UserSerializer 
    filter_fields = ('username', 'is_player', 'first_name', 'last_name', 'team' , 'email',)