add longer fields to custom user
This commit is contained in:
parent
38ce57bdae
commit
373d433516
4 changed files with 64 additions and 7 deletions
|
@ -13,10 +13,17 @@ config.init()
|
|||
|
||||
NEW_LENGTH = {
|
||||
'username': 255,
|
||||
'email': 255,
|
||||
'email': 254,
|
||||
'password': 255,
|
||||
}
|
||||
|
||||
def monkey_patch_groupname():
|
||||
f = Group._meta.get_field('name')
|
||||
f.max_length = 255
|
||||
for v in f.validators:
|
||||
if isinstance(v, MaxLengthValidator):
|
||||
v.limit_value = 255
|
||||
|
||||
def monkey_patch_username():
|
||||
for field in NEW_LENGTH:
|
||||
f = User._meta.get_field(field)
|
||||
|
@ -24,11 +31,22 @@ def monkey_patch_username():
|
|||
for v in f.validators:
|
||||
if isinstance(v, MaxLengthValidator):
|
||||
v.limit_value = NEW_LENGTH[field]
|
||||
monkey_patch_groupname()
|
||||
|
||||
def apply_patch():
|
||||
from django.db import connection, transaction
|
||||
cursor = connection.cursor()
|
||||
table = connection.introspection.get_table_description(cursor, Group._meta.db_table)
|
||||
sql = []
|
||||
for row in table:
|
||||
if row.name == 'name' and row.internal_size != 255:
|
||||
sql.append('ALTER TABLE "%s" ALTER "%s" TYPE varchar(%d)' % (
|
||||
Group._meta.db_table, row.name, 255)
|
||||
)
|
||||
for q in sql:
|
||||
cursor.execute(q)
|
||||
if sql:
|
||||
transaction.commit()
|
||||
|
||||
f = Group._meta.get_field('name')
|
||||
f.max_length = 255
|
||||
for v in f.validators:
|
||||
if isinstance(v, MaxLengthValidator):
|
||||
v.limit_value = 255
|
||||
|
||||
monkey_patch_username()
|
||||
|
|
|
@ -30,6 +30,8 @@ class Command(BaseCommand):
|
|||
print(sql)
|
||||
cursor.execute(sql)
|
||||
|
||||
app.monkey_patch.apply_patch()
|
||||
|
||||
if settings.DB_GIN_TRGM:
|
||||
import entity.models
|
||||
import document.models
|
||||
|
|
24
pandora/system/migrations/0003_field_length.py
Normal file
24
pandora/system/migrations/0003_field_length.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 3.0.6 on 2020-05-30 10:10
|
||||
|
||||
import django.contrib.auth.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0002_rename_user_table'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='email',
|
||||
field=models.EmailField(blank=True, max_length=254, verbose_name='email address'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='username',
|
||||
field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 255 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=255, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'),
|
||||
),
|
||||
]
|
|
@ -1,6 +1,19 @@
|
|||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
class User(AbstractUser):
|
||||
pass
|
||||
|
||||
password = models.CharField(_('password'), max_length=255)
|
||||
username = models.CharField(
|
||||
_('username'),
|
||||
max_length=255,
|
||||
unique=True,
|
||||
help_text=_('Required. 255 characters or fewer. Letters, digits and @/./+/-/_ only.'),
|
||||
validators=[AbstractUser.username_validator],
|
||||
error_messages={
|
||||
'unique': _("A user with that username already exists."),
|
||||
},
|
||||
)
|
||||
last_name = models.CharField(_('last name'), max_length=150, blank=True)
|
||||
|
|
Loading…
Reference in a new issue