我遇到了以下问题: 我有一个旧的(最近升级到Django 1.6)网站,它使用一对一关系的用户配置文件,但对某些模型的FK引用指向auth.User。我在一个单独的子域中构建一个1.8的站点,该子站使用与旧的相同的数据库,并使用旧的两个应用程序,但有一个自定义的auth模型类。我知道我在做什么,并希望为这两个网站的用户提供不同的表格。但系统检查新站点失败,字段为.E301错误:
core.RecipientAccount.created_by: (fields.E301) Field defines a relation with the model 'auth.User', which has been swapped out.
HINT: Update the relation to point at 'settings.AUTH_USER_MODEL'.
可以解决这个问题吗?或者我只需要为新网站使用1.6或者编写大量自定义迁移来重构旧网站?
答案 0 :(得分:1)
我暂时找到了问题的解决方案。最终,我重构旧项目以使用它自己的自定义用户模型。但临时修复是使用ForeignKey的子类来引用django.contrib.auth.User,它会跳过对交换模型的检查。
class ForeignKeySkipsSwappedCheck(models.ForeignKey):
def check(self, **kwargs):
from django.db.models.fields.related import RelatedField
errors = super(RelatedField, self).check(**kwargs)
errors.extend(self._check_related_name_is_valid())
errors.extend(self._check_relation_model_exists())
errors.extend(self._check_clashes())
return errors