django - Django 将字符串转换为模型的形式
问题描述
我正在尝试编写一个简单的可重用 Django 应用程序,该应用程序链接到 User 模型,但由于可以替换它,我需要将它链接到AUTH_USER_MODEL
.
这很好,models
但我有一个基于的表单集User
,所以我需要一个我试图填充的表单,如下所示:
from django.forms import ModelForm
from django.forms.models import inlineformset_factory
from optin.models import UserOptin
from django.conf import settings
#from django.contrib.auth.models import User
USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', None) or \
'auth.User'
class UserForm(ModelForm):
class Meta:
model = USER_MODEL
fields = '__all__'
class UserOptinForm(ModelForm):
class Meta:
model = UserOptin
fields = '__all__'
UserOptinFormSet = inlineformset_factory(USER_MODEL, UserOptin,
form=UserOptinForm, extra=0)
这会产生一个错误:
AttributeError:“unicode”对象没有属性“_meta”
这是因为USER_MODEL
是一个字符串。我如何将其转换为实际的model
?
解决方案
您可以使用eval()
函数,内部解析的所有表达式参数将被评估为 Python 表达式更多信息可以在这里找到
USER_MODEL = eval(getattr(settings, 'AUTH_USER_MODEL', None) or 'auth.User')
# The fallback will raise an Error here
我建议你 import User
fromdjango.contrib.auth.models
因为,如果AUTH_USER_MODEL
没有定义,回退将是auth.User
,它不会引发NameError
任何模块名称auth
,所以你可以使用以下
from django.contrib.auth.models import User
USER_MODEL = eval(getattr(settings, 'AUTH_USER_MODEL', None) or 'User')
推荐阅读
- node.js - 我正在尝试将 React 本机 tcp 客户端连接到节点服务器,但未建立连接
- r - 如何为一系列表格分配标题
- javascript - 使用jQuery计算父div内的总元素
- python - python docopt:集体详尽的论点
- java - 如何在 FAB 中的 Src 图像上方产生波纹效果
- c# - Azure ServiceBus - 多次读取同一消息
- c - 二维数组指针
- node.js - 无法使用 findOne 从 mongodb 检索用户
- numpy - 将数据库中的多个值组合到一张图像中
- azure-functions - 在 Azure 持久函数中,如何获取一个活动函数的输出作为另一个函数的输入