2012-08-24 102 views
1

因此,我正在學習如何使用Django,並且我正在嘗試將我的Person類與位於包django.contrib.auth.models中的Django的User類集成。我繼承類是這樣的:那麼繼承django.contrib.auth.models導致不哈希密碼

class Person(User): 

    MALE = 'M' 
    FEMALE = 'F' 

    GENDER = (
     (MALE, 'Male'), 
     (FEMALE, 'Female'), 
    ) 

    birth_date = models.DateField() 

    gender = models.CharField(max_length = 1, choices = GENDER) 

我的形式是這樣定義的:

class SignupForm(ModelForm): 
    MALE = 'M' 
    FEMALE = 'F' 

    GENDER = (
     (MALE, 'Male'), 
     (FEMALE, 'Female'), 
    ) 

    thisYear = date.today().year 

    YEARS = [thisYear - year for year in range(100)] 

    password = forms.CharField(widget = forms.PasswordInput(), min_length=5, max_length = 128) 

    birth_date = forms.DateField(widget=extras.SelectDateWidget(years = YEARS), initial='1990-01-01') 

    gender = forms.ChoiceField(choices = GENDER, initial='M') 

    class Meta: 
     model = Person 
     exclude = ('last_name', 'is_staff', 'is_active', 'is_superuser', 'last_login', 'date_joined', 'user_permissions', 'groups', 'attraction') 

     #all fields in this list will map to a specific model attribute and will be comitted to the database 
     fields = ('username', 'password', 'first_name', 'email', 'gender', 'birth_date') 

我排除了一些東西,但你明白了吧。在我看來,當我創建一個新的Person時,我打電話newPerson = signupForm.save(commit=False)

向newPerson添加了幾個值之後,我打電話給newPerson.save()

此操作在兩個不同的表中創建一個新行:auth_user表和person表。

如果我查詢auth_user表,我發現我的密碼從未散列過。查看Django源代碼,這表明create_user從未被調用過。有人可以向我解釋這是如何工作的嗎?

此外,如果任何人都可以解釋我如何查詢auth_user信息與個人實例,這也會很好。他們之間沒有明確的外鍵,但繼承必須考慮到某些事情。

回答

0

如果您自定義Django的AUTH_USER模塊

你應該創建你的模型像

類Person(models.Model):

user = models.OneToOneField(User) 
blah = 
. 
. 

不要忘了從AUTH導入用戶.models

在您的意見

if form.is_valid(): 
    user = User.objects.create_user(username = form.cleaned_data['username'], 
            email = form.cleaned_data['email'], 
            password = form.cleaned_data['password'], 
            ) 

爲Django文檔說create_user本身將哈希密碼字段你在AUTH_USER表

您需要更改您的註冊表單也

希望這將幫助你

經過http://www.hackedexistence.com/project-django.html這鏈接