随着Django
1.5和自定义用户模型的引入,该模型已AUTH_PROFILE_MODULE
被弃用。在我现有的Django应用程序中,我使用该User
模型,也有一个Profile
带有外键的模型,User
并在配置文件中存储有关用户的其他内容。当前正在使用,AUTH_PROFILE_MODULE
并将其设置为“
app.profile”。
所以很明显,我的代码倾向于做很多事情,user.get_profile()
现在这需要解决。
现在,我可以创建一个新的自定义用户模型(只需扩展我的个人资料模型User
),然后在我当前拥有用户外键的所有其他地方也都需要更改…因此这将是一个很大的在我的现场服务中迁移。
是否有任何方法-无需模型迁移-
仅通过在某处创建/覆盖该get_profile()
函数,例如my_user.userprofile_set.all()[0]
)?
有人走了这条路并且可以分享想法或经验吗?
如果我现在再次在哪里进行此服务-显然不会采用这种方式,但是使用半大型现场制作系统,我可以提供捷径:-)
使用与内置关系相关的配置文件模型User
仍然是用于存储其他用户信息的完全合法的构造(在许多情况下建议使用)。鉴于内置的Django
1-to-1语法在此处干净利落地工作,因此现在不再使用的AUTH_PROFILE_MODULE
和get_profile()
东西变得不必要了。
如果您已经 在概要文件模型上
使用OneToOneField
到User
,则从旧用法的转换实际上很容易,这是建议在不赞成使用get_profile之前设置概要文件模块的方式。
class UserProfile(models.Model):
user = OneToOneField(User, related_name="profile")
# add profile fields here, e.g.,
nickname = CharField(...)
# usage: no get_profile() needed. Just standard 1-to-1 reverse syntax!
nickname = request.user.profile.nickname
如果您不熟悉的语法,请参见此处OneToOneField
,这使这成为可能。最终可以轻松搜索并替换get_profile()
forprofile
或无论您related_name
是什么(在上述情况下,与汽车相关的名称都将是user_profile
)。标准的Django反向1-1语法实际上比get_profile()
!
但是,我意识到这并不能完全回答您的问题。您表示您在个人资料模块中使用了ForeignKey
to
User
,而不是使用OneToOne
,这很好,但是如果您将其保留为ForeignKey
,语法就不会那么简单,就像您在后续评论中所指出的那样。
假设您ForeignKey
在实践中将自己用作唯一的外键(本质上是一对一),因为在数据库中aOneToOneField
只是一个ForeignKey
带有unique=True
约束的字段,您应该能够在代码中
将该ForeignKey
字段更改为aOneToOneField
而不用实际上必须进行大量的数据库迁移或导致任何数据丢失。
如果您使用 South
进行迁移,则执行上一节中的代码更改可能会使South误删除旧字段并创建新字段(如果您执行)schemamigration --auto
,因此您可能需要手动编辑迁移才能正确执行操作。一种方法是先创建schemamigration,然后取消前进和后退方法,这样它实际上就不会尝试做任何事情,但是仍然可以继续冻结模型OneToOneField
。然后,如果您想做得完美,则还应该将唯一约束添加到相应的数据库外键列中。您既可以使用SQL手动执行此操作,也可以通过South(通过手动编辑迁移方法或通过unique=True
在ForeignKey
并在将其切换为之前创建第一个South迁移,然后OneToOneField
进行第二个迁移,并取消掉前进/后退方法。
我有JavaWebService代码在我的eclipse。我使用了@WebService@Webmethod,@XmlElements,@XmlType,@XmlAccessorType 现在我正在使用cxf框架中的java2ws命令生成wsdl。这是命令 我的wsdl文件包含agr0作为我不想要的名称,因为当我将其导入SoapUI时。它正在字段周围添加标记。 下面是带有arg0的wsdl部分 下
问题内容: 我正在使用Apache Derby嵌入式数据库在Maven项目中进行单元测试。不幸的是,每当运行测试时,我最终都会在项目根目录中找到该文件。数据库本身是在目录()中创建的,因此这不是问题。在查阅参考指南之后, 我尝试在JDBC url()上设置参数,但这似乎是针对其他日志的,因此仍然会出现。 任何帮助深表感谢。 问题答案: 您可以通过创建以下类来摆脱文件 并设置JVM系统属性,例如,使
在这段代码中,我从\u RETURN\u VALUE得到了\u SOME\u PATH\u上的
问题内容: 到目前为止,给我带来了很多麻烦,所以我想摆脱它。尽管spring框架文档清楚地说明了应该做的事情,但实际上 并没有摘要列表。 所以我一直坚持删除并得到错误 -在名称为的中找不到带有请求的映射 对于所有应该由控制器类解决的Url(在这种情况下:)。有什么建议可以让我了解更多信息吗?我非常想知道到底由代表什么标签。 问题答案: 你可以用来自定义定义的每个bean 。现在,javadocs详
问题内容: 到现在为止,给我造成了很多麻烦,所以我想摆脱它。尽管spring框架文档清楚地说明了应该做的事情,但实际上 并没有摘要列表。 所以我坚持删除并现在得到错误 WARN osweb.servlet.PageNotFound-在DispatcherServlet中,名称为’workoutsensor’的URI [/ webapp / trainees]的HTTP请求未找到映射 对于所有应该由
问题内容: 我们正在使用iText从Java代码生成PDF文件,该文件在大多数情况下效果很好。几天前,我们开始生成PDF / A,而不是需要嵌入所有字体的普通PDF文件。iText 主要是自定义类和其他类的构建,在这些类中我们直接控制字体。所有使用的字体都是通过通过以下代码加载的TTF文件创建的- 效果很好: 现在,我们在使用HTML代码生成的PDF中使用一种特定的内容类型。我们使用来处理该部分。