2017-03-03 7 views
0

これは何とか私の最後の質問(django user with email as pk - hack possible?)に接続されているが、私は別のアプローチしようとしている:それは私のプロジェクトへの完全なdjango.contrib.authをコピーして、そこにファイルを変更する悪い習慣がdjango良いスタイル:ローカルプロジェクトに内蔵ディレクトリをコピーしますか?

ですが?私はカスタムユーザーモデルを使いたいと思っていて、CustomUserManagerとCustomUserのほかに、権限、グループなどを変更するために多くのことに遭遇しました。また、あるアプリにはグループを、別のアプリにはMyUserを持たせたくありません。また、userenaを統合するには、Userにもっと一層の変更が必要です。

次のdjangoバージョンにアップグレードすることができない他に問題が発生しますか?

私は潜在的にコピーすることによって発生する可能性が多くの問題があると思い

+0

'django.contrib.auth'にセキュリティ関連の機能が満載だとすれば、モジュールをコピーし、重要なアップデートを見逃すことは恐ろしいことです。 – knbk

答えて

2

...など、多くの場合、尋ねた質問をして申し訳ありませんが、何とかマニュアルやフォーラムの投稿があまりにも多様で、から選択することと矛盾していますあなたのアプリソースへの完全なdjango.contrib.authディレクトリ - つまり、ビルドに関するものです。

AbstractBaseUserを拡張したカスタムモデルを使用してユーザーモデルを拡張するだけではどうですか?以下のような

何か:

from __future__ import unicode_literals 

from django.db import models 
from django.core.mail import send_mail 
from django.contrib.auth.models import PermissionsMixin 
from django.contrib.auth.base_user import AbstractBaseUser 
from django.utils.translation import ugettext_lazy as _ 

from .managers import UserManager 


class User(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(_('email address'), unique=True) 
    first_name = models.CharField(_('first name'), max_length=30, blank=True) 
    last_name = models.CharField(_('last name'), max_length=30, blank=True) 
    date_joined = models.DateTimeField(_('date joined'), auto_now_add=True) 
    is_active = models.BooleanField(_('active'), default=True) 
    avatar = models.ImageField(upload_to='avatars/', null=True, blank=True) 

    objects = UserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [] 

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

    def get_full_name(self): 
     ''' 
     Returns the first_name plus the last_name, with a space in between. 
     ''' 
     full_name = '%s %s' % (self.first_name, self.last_name) 
     return full_name.strip() 

    def get_short_name(self): 
     ''' 
     Returns the short name for the user. 
     ''' 
     return self.first_name 

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

他の多くのオプションがあります。 Check this out他にどのようなオプションがあるか確認したい場合は、

+0

回答とコードをありがとうございます。私はすでにこれを試してきましたが、何かが間違っています。あなたは 'auth'をINSTALLED_APPSに残していますよね?したがって、auth.Userとmyapp.Userはあなたのデータベースにありますか? 'auth'をコメントアウトすると、パーミッションなどが見つかりません – Ilja

+0

DBにユーザテーブルを持っているのはどうですか? –

+0

まあ、何とか2つのテーブルを持っているのは間違っているように見えました.1人は新しいユーザー用で、もう1人は元のauth/User用です。また、権限とグループは古いユーザーに接続されていますが、そうではありませんか? – Ilja

関連する問題