2016-05-16 23 views
1

私はユーザーはジャンゴで、プロファイル情報を取得する方法1.9

def guest_login(request): 
    form = SomeForm(request.POST or None) 
    if form.is_valid(): 
     email = request.POST['email'] 
     password= request.POST['password'] 
     u = authenticate(username = email, password = password) 
     if uis not None: 
      if u.is_active: 
       login(request, u) 
       userProfile= request.user.profile 
       return HttpResponseRedirect(userProfile.get_absolute_url()) 
      else: 
       messages.error(request, 'Text', extra_tags='text') 
     else: 
      messages.error(request, 'Text', extra_tags='text') 
    else: 
     form = SomeForm() 
    context = { 
     "form": form, 
    } 

    return render(request, 'loginpage.html', context) 

だから、私は私自身を作成し​​、私はこのようにそれをやった、基本的なユーザーを拡張しませんでした、私のviews.pyファイルでこのメソッドを持っています。

AUTH_USER_MODEL = 'korisnik.Korisnik' 
AUTH_PROFILE_MODULE = 'korisnik.KorisnikProfil' 

すべての行を除いて、正常に動作します:

class MyUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(_('email address'), max_length=255, db_index=True, blank = False, unique = True) 
    name= models.CharField(blank = False, max_length = 100) 
    surname= models.CharField(blank = False, max_length = 100) 
    # slug = models.SlugField(unique = True) 
    is_staff = models.BooleanField(
     _('some_text'), default=False, help_text=_(
      'text')) 
    is_active = models.BooleanField(_('ctive'), default=True, help_text=_(
     'text' 
     'text')) 
    date_joined = models.DateTimeField(_('date created'), default=timezone.now) 

    objects = UserManager() 

    USERNAME_FIELD = 'email' 

    class Meta: 
     verbose_name = _('user') 
     verbose_name_plural = _('users') 
     # abstract = True 

    def get_full_name(self): 
     return self.name + " " + self.surname 

    def get_short_name(self): 
     return self.name 

    def get_email(self): 
     return self.email 

    def email_user(self, subject, message, from_email=None, **kwargs): 
     """Send an email to this User.""" 
     send_mail(subject, message, from_email, [self.email], **kwargs) 

class MyUserProfile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 
    slug = models.SlugField(unique=True) 

    def get_absolute_url(self): 
     return reverse("user:restoraunts", kwargs={"slug": self.slug}) 

User.profile = property(lambda u: MyUser.objects.get_or_create(user=u)[0]) 

def create_slug(instance, new_slug=None): 
    slug = slugify(instance.user.name) 
    if new_slug is not None: 
     slug = new_slug 
    qs = MyUserProfile.objects.filter(slug=slug).order_by('-id') 
    exists = qs.exists() 
    if exists: 
     new_slug = "%s-%s" % (slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 
    return slug 

def pre_save_guest_receiver(sender, instance, *args, **kwargs): 
    if not instance.slug: 
     instance.slug = create_slug(instance) 
# 
pre_save.connect(pre_save_guest_receiver, sender=MyUserProfile) 

、コメントを追加しましたが、settings.pyで

userProfile= request.user.profile 

「MyUserには属性プロファイルがありません」と表示されます。 私はすべて、get_profile()、get_profile、profile()、profile ...を試しました。誰でも助けてくれますか?ありがとうございました。

答えて

1

AUTH_PROFILE_MODULE設定とget_profile()メソッドwhere remove in django 1.7に注意してください。

MyUserProfile.userフィールドにrelated_nameを追加してみてください。

また、ユーザーモデルに登録されているスラッグを追加して余分な関係を避けることもできます。

+0

私はユーザーモデルにスラッグフィールドを追加し、すべて正常に動作します。私はおそらく、ユーザークラスにスラッグフィールドを追加することは良い考えではないと思ったので、私はユーザープロファイルで試しました。ありがとうございました。 – P3P5

関連する問題