gpt4 book ai didi

python - django auth 用户截断电子邮件字段

转载 作者:太空狗 更新时间:2023-10-29 20:14:59 25 4
gpt4 key购买 nike

我的 django.contrib.auth 用户模型存在问题,其中电子邮件 max_length 为 75。

我从 facebook api 收到超过 75 个字符的电子邮件地址,我需要(真的很想)将它们存储在用户中,以便来自 facebook connect 和其他用户的连续性。

我可以通过手动编辑 mySql 数据库中的字段来解决“第 1 行‘email’列的数据被截断”的问题,但是是否有更好的方法解决这个问题? 最好是不需要我手动编辑数据库 每次为模式更改重置数据库时?

只要我可以将其添加到重置脚本或 initial_data.json 文件中,我就可以编辑数据库。

最佳答案

EmailField 75 个字符的长度在 django 中是硬编码的。你可以这样解决这个问题:

from django.db.models.fields import EmailField
def email_field_init(self, *args, **kwargs):
kwargs['max_length'] = kwargs.get('max_length', 200)
CharField.__init__(self, *args, **kwargs)
EmailField.__init__ = email_field_init

但这会改变所有 EmailField 字段的长度,因此您也可以尝试:

from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from django.db import models
User.email = models.EmailField(_('e-mail address'), blank=True, max_length=200)

这两种方式最好将此代码放在任何模块的初始化中,然后再安装 INSTALLED_APPS 中的 django.contrib.auth

从 Django 1.5 开始,您可以使用自己的基于 AbstractUser 模型的自定义模型,因此您可以使用自己的字段和长度。在你的模型中:

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
email = models.EmailField(_('e-mail address'), blank=True, max_length=200)

在设置中:

AUTH_USER_MODEL = 'your_app.models.User'

关于python - django auth 用户截断电子邮件字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/915910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com