2016-12-24 57 views
0

嘗試用以下代碼覆蓋用戶模型,但不知怎的,我無法覆蓋用戶名的最大長度和最小長度。用Django覆蓋用戶名的最大長度/最小長度ModelForm中的用戶模型

更具體地說,當我檢查python manage.py shell時,我確實覆蓋了它們。但它似乎對呈現的html沒有影響(用戶名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

是的,嘗試覆蓋表單中的字段似乎不太清楚,並且可能會導致與模型兼容的問題。不過,感謝bro,我會檢查如何自定義User模型。 – JianWei