gpt4 book ai didi

django - 迁移可重用 django 应用程序模型以使用自定义用户模型时遇到问题

转载 作者:行者123 更新时间:2023-12-01 02:27:05 25 4
gpt4 key购买 nike

我需要将现有项目更新到 Django 1.5 以利用其新可用的自定义用户模型。但是,我无法将包含带有外键的模型的可重用应用程序迁移到用户。目前,外键指向auth.User但是对于自定义用户模型,它需要指向 myapp.CustomUser .因此,需要某种迁移。我不能简单地为它创建一个迁移文件,因为它是一个可重用的应用程序。这不会是 future 的证明,因为每次更新应用程序时,我都需要记住再次创建该迁移(甚至可能存在迁移冲突),因此这不是一个完全可行的解决方案。

除了fork每个项目,添加一个迁移文件,然后使用它之外,还有其他解决方案吗?

一些代码:
models.py在可重用的应用程序中

from django.conf import settings
from django.db import models

UserModel = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')

class ModelA(models.Model):
user = models.ForeignKey(UserModel)
models.py在我的项目中
from django.conf import settings
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
...
settings.py在我的项目中
AUTH_USER_MODEL = 'myapp.CustomUser'

最佳答案

因此,如果可重用应用程序具有为用户创建外键的迁移,则可以执行以下操作来支持 Django 1.5 的自定义用户模型。

try:
from django.contrib.auth import get_user_model
except ImportError: # django < 1.5
from django.contrib.auth.models import User
else:
User = get_user_model()

class Migration(SchemaMigration):

def forwards(self, orm):
db.create_table('reusableapp.modela', (
('user', self.gf('django...ForeignKey')(to=orm["%s.%s" % (User._meta.app_label, User._meta.object_name)])

models = {
...
# this should replace "auth.user"
"%s.%s" % (User._meta.app_label, User._meta.module_name): {
'Meta': {'object_name': User.__name__},
}
"reusableapp.modela": {
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s.%s']"% (User._meta.app_label, User._meta.object_name)})
}
}

我不确定这是否是最好的解决方案,但它被用于诸如 django-reversion 之类的应用程序中。

但是,如果您最初从 auth.User 开始,此解决方案仍然会带来问题。然后改为 myapp.customuser ,仅仅是因为 South 尊重 AUTH_USER_MODEL 但尚未创建自定义用户模型的迁移。这可能在测试期间发生。南票 #1179 解决了这个问题 ( http://south.aeracode.org/ticket/1179 )。

关于django - 迁移可重用 django 应用程序模型以使用自定义用户模型时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472704/

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