{"id":1844,"date":"2022-05-08T04:39:44","date_gmt":"2022-05-07T19:39:44","guid":{"rendered":"http:\/\/www.agile-software.site\/?p=1844"},"modified":"2022-05-08T04:40:33","modified_gmt":"2022-05-07T19:40:33","slug":"%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0user%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95","status":"publish","type":"post","link":"https:\/\/agile-software.net\/?p=1844","title":{"rendered":"\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u30c7\u30d5\u30a9\u30eb\u30c8\uff08\u6a19\u6e96\uff09\u306eUser\u30e2\u30c7\u30eb<\/h2>\n\n\n\n<p>Django\u306b\u306f\u6a19\u6e96\u3067\u5229\u7528\u3067\u304d\u308bUser\u30e2\u30c7\u30eb\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br><\/p>\n\n\n\n<p>\u6a19\u6e96User\u30e2\u30c7\u30eb\u306fAbstractUser\u3092\u7d99\u627f\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002<br>\u305d\u306e\u305f\u3081\u6a19\u6e96User\u30e2\u30c7\u30eb\u3067\u306f\u4ee5\u4e0b\u306b\u793a\u3059AbstractUser\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30ab\u30e9\u30e0\u304c\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>username = models.CharField()\nfirst_name = models.CharField()\nlast_name = models.CharField()\nemail = models.EmailField()\nis_staff = models.BooleanField()\nis_active = models.BooleanField()\ndate_joined = models.DateTimeField()<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><th>\u30ab\u30e9\u30e0\u540d<\/th><th>\u8aac\u660e<\/th><\/tr><tr><td>username<\/td><td>\u30e6\u30fc\u30b6\u30fc\u540d<\/td><\/tr><tr><td>first_name<\/td><td>\u540d\u524d<\/td><\/tr><tr><td>last_name<\/td><td>\u82d7\u5b57<\/td><\/tr><tr><td>email<\/td><td>\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9<\/td><\/tr><tr><td>is_staff<\/td><td>\u7ba1\u7406\u753b\u9762\u306e\u30a2\u30af\u30bb\u30b9\u53ef\u5426<\/td><\/tr><tr><td>is_active<\/td><td>\u30ed\u30b0\u30a4\u30f3\u306e\u53ef\u5426<\/td><\/tr><tr><td>date_joined<\/td><td>\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u6642<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u7406\u7531<\/h2>\n\n\n\n<p>Django\u306e\u6a19\u6e96User\u30e2\u30c7\u30eb\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5f8c\u3059\u3050\u306b\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u305f\u3081\u3001Django\u521d\u5fc3\u8005\u306e\u65b9\u304c\u5229\u7528\u3059\u308b\u306b\u306f\u3068\u3066\u3082\u4fbf\u5229\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3057\u304b\u3057\u72ec\u81ea\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u306b\u5fc5\u8981\u306a\u9805\u76ee\u306f\u6a19\u6e96User\u30e2\u30c7\u30eb\u3068\u7570\u306a\u308b\u306e\u304c\u666e\u901a\u3067\u3059\u3002<br>\u307e\u305f\u30ed\u30b0\u30a4\u30f3\u306busername\u3067\u306f\u306a\u304femail\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u306e\u305f\u3081\u5927\u62b5\u306e\u5834\u5408\u3001User\u30e2\u30c7\u30eb\u3092Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5408\u308f\u305b\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u306e\u4f5c\u6210\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u65b9\u6cd5\u306f\u4ee5\u4e0b\uff13\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u6a19\u6e96User\u30e2\u30c7\u30eb\u3068\uff11\u5bfe\uff11\u306e\u95a2\u4fc2\u3092\u6301\u3064\u30e2\u30c7\u30eb\u3092\u4f5c\u6210<\/li><li>AbstractUser\u3092\u7d99\u627f\u3057\u305f\u30e2\u30c7\u30eb\u3092\u4f5c\u6210<\/li><li>AbstractBaseUser\u3092\u7d99\u627f\u3057\u305f\u30e2\u30c7\u30eb\u3092\u4f5c\u6210<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u6a19\u6e96User\u30e2\u30c7\u30eb\u3068\uff11\u5bfe\uff11\u306e\u95a2\u4fc2\u3092\u6301\u3064\u30e2\u30c7\u30eb\u3092\u4f5c\u6210<\/h4>\n\n\n\n<p>\u4f8b\u3048\u3070\u6b21\u306e\u3088\u3046\u306b\u6a19\u6e96User\u30e2\u30c7\u30eb\u3068\uff11\u5bfe\uff11\u306e\u95a2\u4fc2\u3092\u6301\u3064\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u306b\u8ffd\u52a0\u3057\u305f\u3044\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u305d\u3053\u306b\u66f8\u304d\u8fbc\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class UserAddInfo(models.Model):\n    user = models.OneToOneField(settings.AUTH_USER_MODEL)\n    department = models.CharField()\n    image = models.ImageField()<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u6a19\u6e96\u306eUser\u30e2\u30c7\u30eb\u3092\u6d3b\u304b\u3057\u305f\u307e\u307e\u3001\u65b0\u3057\u3044\u60c5\u5831\u3092User\u30e2\u30c7\u30eb\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3057\u304b\u3057\u3053\u306e\u65b9\u6cd5\u3067\u306f\u65e2\u5b58\u306e\u30ab\u30e9\u30e0\uff08first_name\u3084last_name\u306a\u3069\uff09\u3092\u5fc5\u305a\u5229\u7528\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u3067\u3059\u3057\u3001\u30ed\u30b0\u30a4\u30f3\u3092email\u306b\u5909\u66f4\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u306a\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u30c6\u30fc\u30d6\u30eb\u304c\u8907\u6570\u306b\u5206\u304b\u308c\u308b\u3053\u3068\u306b\u3088\u308a\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u60aa\u304f\u306a\u308b\u3053\u3068\u304c\u8003\u3048\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u7406\u7531\u3088\u308a\u3001\u6a19\u6e96User\u30e2\u30c7\u30eb\u3068\uff11\u5bfe\uff11\u306e\u95a2\u4fc2\u3092\u6301\u3064\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u306f\u304a\u52e7\u3081\u3057\u307e\u305b\u3093<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">AbstractUser\u3092\u7d99\u627f\u3057\u305f\u30e2\u30c7\u30eb\u3092\u4f5c\u6210<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class AbstractUser(AbstractBaseUser, PermissionsMixin):\n    username_validator = UnicodeUsernameValidator()\n    username = models.CharField(_(&#39;username&#39;), max_length=150, unique=True,\u2026)\n    first_name = models.CharField(_(&#39;first name&#39;), max_length=30, blank=True)\n    last_name = models.CharField(_(&#39;last name&#39;), max_length=150, blank=True)\n    email = models.EmailField(_(&#39;email address&#39;), blank=True)\n    is_staff = models.BooleanField(_(&#39;staff status&#39;), default=False,\u2026)\n    is_active = models.BooleanField(_(&#39;active&#39;), default=True,\u2026)\n    date_joined = models.DateTimeField(_(&#39;date joined&#39;), default=timezone.now)\n\n    objects = UserManager()\n\n    EMAIL_FIELD = &#39;email&#39;\n    USERNAME_FIELD = &#39;username&#39;\n    REQUIRED_FIELDS = [&#39;email&#39;]\n\n    class Meta:\n        verbose_name = _(&#39;user&#39;)\n        verbose_name_plural = _(&#39;users&#39;)\n        abstract = True<\/code><\/pre><\/div>\n\n\n\n<p>AbstractUser\u306fAbstractBaseUser\u3068PermissionsMixin\u3092\u7d99\u627f\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e0a\u8a18AbstractUser\u30e2\u30c7\u30eb\u3092\u7d99\u627f\u3057\u3066\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u3001\u300c\u6a19\u6e96User\u30e2\u30c7\u30eb\u3068\uff11\u5bfe\uff11\u306e\u95a2\u4fc2\u3092\u6301\u3064\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u300d\u3068\u5927\u304d\u306a\u9055\u3044\u306f\u306a\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u30c6\u30fc\u30d6\u30eb\u304c\u8907\u6570\u306b\u5206\u304b\u308c\u308b\u3053\u3068\u306f\u306a\u3044\u306e\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u9762\u3067\u4e0d\u5229\u306b\u306a\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u30ab\u30e9\u30e0\uff08\u5c5e\u6027\uff09\u306e\u8ffd\u52a0\u3057\u304b\u3067\u304d\u306a\u3044\u306e\u3067\u30e2\u30c7\u30eb\u306e\u67d4\u8edf\u6027\u306f\u4f4e\u3044\u3067\u3059<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">AbstractBaseUser\u3092\u7d99\u627f\u3057\u305f\u30e2\u30c7\u30eb\u3092\u4f5c\u6210<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class AbstractBaseUser(models.Model):\n    password = models.CharField(_(&#39;password&#39;), max_length=128)\n    last_login = models.DateTimeField(_(&#39;last login&#39;), blank=True, null=True)\n\n    is_active = True\n\n    REQUIRED_FIELDS = []\n\n    _password = None\n\n    class Meta:\n        abstract = True<\/code><\/pre><\/div>\n\n\n\n<p>AbstractBaseUser\u306fdjango.db.models.Model\u3092\u7d99\u627f\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>AbstractBaseUser\u306b\u306f\u8a8d\u8a3c\u6a5f\u80fd\u306e\u307f\u304c\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u72ec\u81ea\u3067\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/strong><\/p>\n\n\n\n<p>\u3064\u307e\u308a\u8a8d\u8a3c\u4ee5\u5916\u306e\u90e8\u5206\u306f\u306a\u306b\u3082\u5b9f\u88c5\u3055\u308c\u3066\u3044\u306a\u3044\u30af\u30e9\u30b9\u3067\u3042\u308a\u3001first_name\u3084last_name\u3068\u3044\u3063\u305f\u5fc5\u8981\u306e\u306a\u3044\u30d5\u30a3\u30fc\u30eb\u30c9\u3092User\u30e2\u30c7\u30eb\u3067\u4f7f\u308f\u306a\u3044\u3067\u6e08\u3080\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<p>AbstractBaseUser\u3092\u7d99\u627f\u3057\u305fUser\u30e2\u30c7\u30eb\u306f\u4f5c\u6210\u304c\u5c11\u3005\u9762\u5012\u3067\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u67d4\u8edf\u6027\u306f\u975e\u5e38\u306b\u9ad8\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AbstractBaseUser\u3092\u7d99\u627f\u3057\u305fUser\u30e2\u30c7\u30eb\u306e\u4f5c\u6210<\/h2>\n\n\n\n<div class=\"wp-block-jin-gb-block-icon-box jin-icon-caution jin-iconbox\"><div class=\"jin-iconbox-icons\"><i class=\"jic jin-ifont-caution jin-icons\"><\/i><\/div><div class=\"jin-iconbox-main\">\n<p>\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u5229\u7528\u3059\u308b\u5834\u5408\u306f\u3001Django\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u5f8c\u3059\u3050\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002migrate\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u3067\u306fUser\u30e2\u30c7\u30eb\u306e\u5909\u66f4\u306f\u975e\u5e38\u306b\u96e3\u3057\u3044\u3067\u3059<\/p>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uff11\uff0e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u751f\u6210<\/h3>\n\n\n\n<p>\u307e\u305a\u306f\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u7528\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002manage.py startapp\u30b3\u30de\u30f3\u30c9\u3067users\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>python manage.py startapp users<\/code><\/pre><\/div>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a9\u30eb\u30c0\u5185\u306esettings.py\u306eINSTALLED_APPS\u6b04\u306b\u751f\u6210\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>INSTALLED_APPS\u3000= [\n    &#39;\u2026&#39;,\n    &#39;users.apps.UsersConfig&#39;,\n]<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uff12\uff0e\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u6b21\u306b\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f5c\u6210\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u306emodels.py\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<em>django.contrib.auth.models.AbstractUser<\/em>\u3092\u5143\u306b\u3057\u3066\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django.db import models\nfrom django.contrib.auth.models import PermissionsMixin\nfrom django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager\nfrom django.core.mail import send_mail\nfrom django.utils import timezone\nfrom django.contrib.auth.validators import UnicodeUsernameValidator\nfrom django.utils.translation import gettext_lazy as _\n\nclass User(AbstractBaseUser, PermissionsMixin):\n    username_validator = UnicodeUsernameValidator()\n\n    username = models.CharField(_(&quot;username&quot;), max_length=50, validators=[username_validator], blank=True)\n    email = models.EmailField(_(&quot;email_address&quot;), unique=True)\n    is_staff = models.BooleanField(_(&quot;staff status&quot;), default=False)\n    is_active = models.BooleanField(_(&quot;active&quot;), default=True)\n    date_joined = models.DateTimeField(_(&quot;date joined&quot;), default=timezone.now)\n\n    objects = UserManager()\n    USERNAME_FIELD = &quot;email&quot;\n    EMAIL_FIELD = &quot;email&quot;\n    REQUIRED_FIELDS = [&#39;username&#39;]\n\n    class Meta:\n        verbose_name = _(&quot;user&quot;)\n        verbose_name_plural = _(&quot;users&quot;)\n\n    def clean(self):\n        super().clean()\n        self.email = self.__class__.objects.normalize_email(self.email)\n\n    def email_user(self, subject, message, from_email=None, **kwargs):\n        send_mail(subject, message, from_email, [self.email], **kwargs)<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">objects<\/h4>\n\n\n\n<p>User\u30e2\u30c7\u30eb\u3067\u8a2d\u5b9a\u3057\u3066\u3044\u308bobjects\u5909\u6570\u306f\u3001views.py\u3067User\u30e2\u30c7\u30eb\u306e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u969b\u306a\u3069\u3067\u5229\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>user = User.objects.get(username=&quot;office54&quot;)<\/code><\/pre><\/div>\n\n\n\n<p>objects\u5909\u6570\u306b\u6307\u5b9a\u3059\u308b\u30af\u30e9\u30b9\uff08\u3053\u3053\u3067\u306fUserManager()\uff09\u306f\u3001\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\uff08manage.py createsuperuser\u306a\u3069\uff09\u3059\u308b\u969b\u306b\u547c\u3070\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">USERNAME_FIELD<\/h4>\n\n\n\n<p>USERNAME_FIELD\u3067\u6307\u5b9a\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u3001\u30ed\u30b0\u30a4\u30f3\u8a8d\u8a3c\u3084\u30e1\u30fc\u30eb\u9001\u4fe1\u306a\u3069\u3067\u5229\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u3053\u3092email\u306b\u3059\u308b\u3053\u3068\u3067\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6307\u5b9a\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u4e00\u610f\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u3053\u3053\u3067\u6307\u5b9a\u3067\u304d\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u306funique=True\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">EMAIL_FIELD<\/h4>\n\n\n\n<p>\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\uff08manage.py createsuperuser\uff09\u3059\u308b\u3068\u304d\u306b\u8868\u793a\u3055\u308c\u308b\u9805\u76ee\u3067\u3059\u3002<br>\u30e6\u30fc\u30b6\u30fc\u306f\u6307\u5b9a\u3057\u305f\u9805\u76ee\u306e\u5024\u3092\u5165\u529b\u3059\u308b\u3088\u3046\u6c42\u3081\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u8907\u6570\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uff13\uff0e\u30ab\u30b9\u30bf\u30e0UserManager\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\uff08manage.py createsuperuser\u306a\u3069\uff09\u3059\u308b\u969b\u306b\u547c\u3070\u308c\u308bUserManager\u3092\u3001\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u7528\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<p>UserManager\u30af\u30e9\u30b9\u306b\u306f_create_user\u95a2\u6570\u3068create_user\u95a2\u6570\u3001create_superuser\u306e\uff13\u3064\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u30e6\u30fc\u30b6\u30fc\u3092\u65b0\u898f\u3067\u4f5c\u6210\u3059\u308b\u969b\u306b\u547c\u3070\u308c\u308b\u95a2\u6570\u3067\u3059\u3002<\/p>\n\n\n\n<p>class User(AbstractBaseUser, PermissionsMixin)\u306e\u4e0a\u90e8\u306b\u4ee5\u4e0b\u3092\u8ffd\u8a18\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class UserManager(BaseUserManager):\n    use_in_migrations = True\n\n    def _create_user(self, username, email, password, **extra_fields):\n        if not email:\n            raise ValueError(&#39;Email\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044&#39;)\n        email = self.normalize_email(email)\n        username = self.model.normalize_username(username)\n        user = self.model(username=username, email=email, **extra_fields)\n        user.set_password(password)\n        user.save(using=self.db)\n        return user\n    def create_user(self, username, email, password=None, **extra_fields):\n        extra_fields.setdefault(&#39;is_staff&#39;, False)\n        extra_fields.setdefault(&#39;is_superuser&#39;, False)\n        return self._create_user(email, password, **extra_fields)\n\n    def create_superuser(self, username, email, password, **extra_fields):\n        extra_fields.setdefault(&#39;is_staff&#39;, True)\n        extra_fields.setdefault(&#39;is_superuser&#39;, True)\n        if extra_fields.get(&#39;is_staff&#39;) is not True:\n            raise ValueError(&#39;is_staff=True\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002&#39;)\n        if extra_fields.get(&#39;is_superuser&#39;) is not True:\n            raise ValueError(&#39;is_superuser=True\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002&#39;)\n        return self._create_user(username, email, password, **extra_fields)<\/code><\/pre><\/div>\n\n\n\n<p>email\u306f\u5fc5\u9808\u9805\u76ee\u306a\u306e\u3067\u3001email\u304c\u7a7a\u306e\u5834\u5408\u306f\u4f8b\u5916\u304c\u767a\u751f\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uff14\uff0e\u8a8d\u8a3c\u30e2\u30c7\u30eb\u306e\u5909\u66f4<\/h3>\n\n\n\n<p>\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u8a8d\u8a3c\u6a5f\u80fd\u3067\u4f7f\u7528\u3059\u308b\u8a8d\u8a3c\u30e2\u30c7\u30eb\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306bsettings.py\u306bAUTH_USER_MODEL\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d.\u30e2\u30c7\u30eb\u540d\u3092\u6307\u5b9a\u3057\u305f\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>AUTH_USER_MODEL = &#39;users.User&#39;<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uff15\uff0e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u884c<\/h3>\n\n\n\n<p>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u3066\u3001\u4f5c\u6210\u3057\u305f\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u53cd\u6620\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>python manage.py migrations\npython manage.py migrate<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uff16\uff0e\u7ba1\u7406\u30b5\u30a4\u30c8\u306e\u8a2d\u5b9a<\/h3>\n\n\n\n<p>\u7ba1\u7406\u30b5\u30a4\u30c8\u3067\u30ab\u30b9\u30bf\u30e0User\u30e2\u30c7\u30eb\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001admin.py\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305fUserCreationForm\u3084UserChangeForm\u3082\u305d\u306e\u307e\u307e\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u5c02\u7528\u30d5\u30a9\u30fc\u30e0\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django.contrib import admin\nfrom django.contrib.auth.admin import UserAdmin\nfrom django.contrib.auth.forms import UserChangeForm, UserCreationForm\nfrom django.utils.translation import ugettext_lazy as _\nfrom .models import User\n\nclass MyUserChangeForm(UserChangeForm):\n    class Meta:\n        model = User\n        fields = &#39;__all__&#39;\n\nclass MyUserCreationForm(UserCreationForm):\n    class Meta:\n        model = User\n        fields = (&#39;email&#39;,&#39;username&#39;)\n\nclass MyUserAdmin(UserAdmin):\n    fieldsets = (\n        (None, {&#39;fields&#39;: (&#39;email&#39;, &#39;password&#39;, &#39;username&#39;)}),\n        (_(&#39;Permissions&#39;), {&#39;fields&#39;: (&#39;is_active&#39;, &#39;is_staff&#39;, &#39;is_superuser&#39;,\n                                       &#39;groups&#39;, &#39;user_permissions&#39;)}),\n        (_(&#39;Important dates&#39;), {&#39;fields&#39;: (&#39;last_login&#39;, &#39;date_joined&#39;)}),\n    )\n    add_fieldsets = (\n        (None, {\n            &#39;classes&#39;: (&#39;wide&#39;,),\n            &#39;fields&#39;: (&#39;email&#39;, &#39;password1&#39;, &#39;password2&#39;),\n        }),\n    )\n    form = MyUserChangeForm\n    add_form = MyUserCreationForm\n    list_display = (&#39;email&#39;, &#39;username&#39;, &#39;is_staff&#39;)\n    list_filter = (&#39;is_staff&#39;, &#39;is_superuser&#39;, &#39;is_active&#39;, &#39;groups&#39;)\n    search_fields = (&#39;email&#39;, &#39;username&#39;)\n    ordering = (&#39;email&#39;,)\n\nadmin.site.register(User, MyUserAdmin)<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u30c7\u30d5\u30a9\u30eb\u30c8\uff08\u6a19\u6e96\uff09\u306eUser\u30e2\u30c7\u30eb Django\u306b\u306f\u6a19\u6e96\u3067\u5229\u7528\u3067\u304d\u308bUser\u30e2\u30c7\u30eb\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u6a19\u6e96User\u30e2\u30c7\u30eb\u306fAbstractUser\u3092\u7d99\u627f\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u6a19\u6e96User\u30e2\u30c7\u30eb\u3067\u306f\u4ee5\u4e0b\u306b\u793a\u3059<\/p>\n","protected":false},"author":1,"featured_media":1846,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-1844","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django"],"_links":{"self":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/1844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1844"}],"version-history":[{"count":1,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/1844\/revisions"}],"predecessor-version":[{"id":1845,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/1844\/revisions\/1845"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/media\/1846"}],"wp:attachment":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}