【发布时间】:2018-01-06 21:24:50
【问题描述】:
我有以下抽象类:
class UserStamp(models.Model):
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
related_name='%(app_label)s_%(class)s_created_by', on_delete=models.CASCADE)
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
related_name='%(app_label)s_%(class)s_updated_by', on_delete=models.CASCADE)
class Meta:
abstract = True
账户模型继承自它:
class Account(UserStamp):
pass
我有一个带有 FK 的用户模型
class User(AbstractBaseUser,PermissionsMixin, UserStamp):
account = models.ForeignKey(Account, blank=True, null=True, related_name='owner',on_delete=models.CASCADE)
迁移时出现以下错误:
django.db.migrations.exceptions.CircularDependencyError:
我认为出现循环错误是因为:
Account 通过从 UserStamp 继承 created_by、updated_by 来调用 User,so 指向 User,而 User 用 Account FK 指向 Account。
如果我使用:
account = models.ForeignKey('accounts.Account', blank=True, null=True, related_name='owner',on_delete=models.CASCADE)
问题没有解决。
我的问题有(2个问题),但我决定将最初的问题分成2个问题更清楚(我认为它们可以单独解决):
Second part here(如何设置created_by、updated_by)
【问题讨论】:
-
你可以把引用的调制解调器写成字符串:'app.model'。
-
@danihip 我检查了示例,但在我的情况下,我有 settings.AUTH_USER_MODEL (自定义用户)不是用作字符串的直接模型,如果我尝试将它用作一个字符串“字段定义了与模型'settings.AUTH_USER_MODEL'的关系,它要么未安装,要么是抽象的。”
-
@danihp 可以详细说明,根据我的情况举个例子(使用'accounts.Account'我仍然得到循环错误)
-
抱歉,我没有意识到错误是在迁移中,但在模型中它本身。将 None 作为默认值并使用 post save 信号设置值呢?
标签: django django-models django-users