2017-03-16 7 views
1

私のバックエンドAPIから許可したいのは、任意のユーザーが.-_ñなどの文字で作成できることです。そのusernameフィールドはprimary_key=True,です。Django Rest Framework - "。"、 " - "、 "_"文字のフィールドユーザー名

私は私の興味のあるusername分野に関連して、この方法の私のカスタムユーザー(AbstractBaseUser)を定義します。

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 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 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',) 

ルートrは私がテusernameフィールドにbacalao.cevichicaのように例えば.文字を持つユーザーを作成すると、ユーザーが作成され

urls.py

router = routers.DefaultRouter() 
router.register(r'users', UserViewSet) 
にこのようOG定義されたが、私は localhost:8000/api/users/

に行くときさ私は非常に慣れていないです

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',) 
関連する問題