2016-12-24 4 views
0

次のコードでユーザーモデルを上書きしようとしますが、ユーザー名のmax_lengthとmin_lengthを上書きできません。Djangoのユーザー名の最大長/最小長をModelFormで上書きする

具体的には、python manage.py shellでチェックすると上書きされます。しかし、レンダリングされたhtmlには何の効果もないようです(username maxlengthはまだ150です)。

どのパーツが間違っているのかわからないので、助けてください。

from django import forms 
from django.contrib.auth.models import User 

class RegistrationForm(forms.ModelForm): 

def __init__(self, *args, **kwargs): 
    super(RegistrationForm, self).__init__(*args, **kwargs) 
    email = self.fields['email'] 
    username = self.fields['username'] 
    email.required = True 
    email.label_suffix = ' ' 
    username.label_suffix = ' ' 
    ######### this is not work!!!############### 
    username.min_length = 6 
    username.max_length = 30 
    ############################################ 

class Meta: 
    model = User 
    fields = ('username', 'email') 
    labels = { 
     'username': '帳號', 
    } 
    help_texts = { 
     'username': '', 
    } 

答えて

1

フォームを変更する代わりに、モデルを変更または上書きする必要があります。

独自のカスタムユーザーモデルを作成する場合は、django-auth-toolsを使用することをおすすめします。簡単に拡張できる基本的なモデル、ビュー、フォームを提供します。あなただけのモデルフォームフィールドを上書きしようとしている場合

+0

私が利用可能になったときにチェックします。 – JianWei

1

、あなたはこの

class RegistrationForm(forms.ModelForm): 
    username = forms.CharField(required=True, min_length=6, max_length=30) 

class Meta: 
     model = User 
     fields = ('username', 'email') 

または

class RegistrationForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(RegistrationForm, self).__init__(*args, **kwargs) 
     self.fields['username'] = forms.CharField(required=True, min_length=6, max_length=30) 

class Meta: 
     model = User 
     fields = ('username', 'email') 

ような何かを行うことができますしかし、私はにAbstractBaseUserから継承されたカスタム・ユーザー・モデルを作成することをお勧めしますユーザ名または電子メールフィールドを無効にしてください。https://docs.djangoproject.com/en/1.10/topics/auth/customizing/

+0

ええ、フォームのフィールドを上書きしようとすると、明らかではないように見え、モデルに互換性の問題が発生する可能性があります。それでも、ありがとう、私はユーザーモデルをカスタマイズする方法を確認します。 – JianWei