2016-08-29 86 views
1

我在學習django,我需要創建一個名爲Person的自定義用戶。我使用contrib.auth.models用戶繼承,但在我的Django管理員的形式添加新教師不顯示字段確認密碼和密碼沒有在表中用戶加密爲什麼我的代碼不加密密碼,如果我繼承django用戶?

from django.db import models 
from django.contrib.auth.models import User, UserManager 

# Create your models here. 


class Person (User): 

    date_of_birth = models.DateField(blank=False, null=False) 

    class Meta: 
     abstract = True 


class ClassRoom (models.Model): 
    classroom = models.CharField(max_length=3, blank=False, null=False) 

    def __unicode__(self): 
     return self.classroom 


class Teacher(Person): 
    phone = models.PositiveIntegerField(max_length=15, blank=False, null=False) 
    classroom = models.ManyToManyField(ClassRoom) 

你可以看到作爲第一個和第二個用戶的這張照片被保存爲用於輸入密碼(該用戶是在django管理員中以普通用戶的身份添加的),但最後一個(在django管理員中作爲教師加入)不加密密碼。

¿有人能幫助我嗎? database photo user table

+0

你是如何設置密碼的? – karthikr

回答

0

爲了加密密碼,您需要通過用戶的set_password方法進行設置。例如,

user = User(
      email=email, is_staff=False, is_active=True, 
      is_superuser=False, 
      last_login=now, date_joined=now, **extra_fields) 

user.set_password(password) 
user.save(using=self._db) 
+0

但是,如果我的類人從用戶繼承,爲什麼我必須這樣做? – randall

+0

由於加密是由模型方法管理的,所以當您將密碼kwarg傳遞給Person模型時,它不會將密碼轉換爲加密密碼。但是,當您調用set_password方法時,它的內部是先加密密碼,然後將值設置爲.password字段(可通過查看代碼詳細信息來查看)。所以後來保存了加密的密碼而前者不是。 django admin通過使用User.objects.create_user()創建用戶,該用戶具有類似於上述答案中提到的實現的實現。 – nKandel

相關問題