2013-07-26 25 views
29

Tôi đang sử dụng mô hình người dùng mặc định trong django cho khá nhiều điều và tôi nhận ra, nếu tôi cần nâng cao hơn nữa, tôi sẽ phải tạo Mô hình người dùng tùy chỉnh của riêng mình django 1.5.Trình quản lý không khả dụng; Người dùng đã được đổi chỗ cho 'pet.Person'

Tôi đã tạo mô hình người dùng tùy chỉnh của mình và tôi có chức năng cho phép người dùng đăng nhập. Tôi nghĩ rằng mô hình người dùng tùy chỉnh của tôi không tương thích với chức năng của tôi vì nó sẽ không cho phép tôi làm request.user. Làm thế nào tôi có thể sửa lỗi này để tôi có thể sử dụng request.user một lần nữa?

xem

def LoginRequest(request): 
     form = LoginForm(request.POST or None)  
    if request.user.is_authenticated(): 
      username = User.objects.get(username=request.user) 
      url = reverse('world:Profile', kwargs = {'slug': person.slug}) 
      return HttpResponseRedirect(url)  
     if request.POST and form.is_valid(): 

      user = form.authenticate_user() 
      login(request, user) 
      username= User.objects.get(username=request.user) 
       person = Person.objects.get(user=request.user) 
      url = reverse('world:Profile', kwargs = {'slug': person.slug}) 
      return HttpResponseRedirect(url) 

    return render(request, 'login.html',{'form': form}) 

mô hình

class PersonManager(BaseUserManager): 
    def create_user(self, email,date_of_birth, username,password=None,): 
     if not email: 
      msg = 'Users must have an email address' 
      raise ValueError(msg) 

     if not username: 
       msg = 'This username is not valid' 
     raise ValueError(msg) 

     if not date_of_birth: 
      msg = 'Please Verify Your DOB' 
      raise ValueError(msg) 

     user = self.model(

email=PersonManager.normalize_email(email),username=username,date_of_birth=date_of_birth) 

     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self,email,username,password,date_of_birth): 
     user = self.create_user(email,password=password,username=username,date_of_birth=date_of_birth) 
     user.is_admin = True 
     user.is_staff = True 
     user.is_superuser = True 
     user.save(using=self._db) 
     return user 


class Person(AbstractBaseUser, PermissionsMixin): 

    email = models.EmailField(verbose_name='email address',max_length=255,unique=True,db_index=True,) 
    username = models.CharField(max_length=255, unique=True) 
    date_of_birth = models.DateField() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['username', 'date_of_birth',] 

    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    is_staff = models.BooleanField(default=False) 

    objects = PersonManager() 

    def get_full_name(self): 
     return self.email 

    def get_short_name(self): 
     return self.email 

    def __unicode__(self): 
     return self.email 

Trả lời

57

Vấn đề là User đề cập đến django.contrib.auth.models.User và bây giờ bạn đã có một Custom Userpet.Person giả sử bạn có trong settings.py

AUTH_USER_MODEL = "pet.Person" 

bạn hav e để xác định User với mô hình Custom User và bạn có thể làm điều này với get_user_model ở phía trên cùng của tập tin mà bạn sử dụng User

from django.contrib.auth import get_user_model 
User = get_user_model() 

bây giờ bạn sẽ có thể sử dụng Custom User mô hình và vấn đề đã được cố định.

+0

Xin chào, điều này có vẻ như nó sẽ giải quyết được vấn đề của tôi - tôi đã tự hỏi tập tin nào nên đi vào? Cảm ơn! –

+2

@GershomMaes AUTH_USER_MODEL bên trong settings.py và mã khác trong chế độ xem của bạn hoặc bất cứ nơi nào bạn sử dụng Mô hình người dùng, Bạn được chào đón: D –

+0

Đã làm việc, được đánh giá cao! –

Các vấn đề liên quan