CircularDependencyError 通过从 Abstract 继承 FK Class
CircularDependencyError by inherting FK from Abstract Class
我有以下摘要class:
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通过继承UserStampcreated_by,updated_by调用User,所以指向User,User用Account FK指向Account。
如果我使用:
account = models.ForeignKey('accounts.Account', blank=True, null=True, related_name='owner',on_delete=models.CASCADE)
问题没有解决。
我的问题有(2个问题),但我决定把最初的问题分成2个问题更清楚(我认为它们可以分开解决):
(如何设置created_by,updated_by)
您可以通过修改模型的 save()
方法来设置默认用户:
class UserStamp(models.Model):
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
...
def save(self, *args, **kwargs):
if not self.created_by:
super_users = settings.AUTH_USER_MODEL.objects.filter(
is_superuser=True).order_by('date_joined')
first_user = super_users[0]
self.created_by = first_user
super().save(*args, **kwargs)
但我认为这不是导致迁移错误的原因。您可能想尝试 OneToOneField
我有以下摘要class:
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通过继承UserStampcreated_by,updated_by调用User,所以指向User,User用Account FK指向Account。
如果我使用:
account = models.ForeignKey('accounts.Account', blank=True, null=True, related_name='owner',on_delete=models.CASCADE)
问题没有解决。
我的问题有(2个问题),但我决定把最初的问题分成2个问题更清楚(我认为它们可以分开解决):
您可以通过修改模型的 save()
方法来设置默认用户:
class UserStamp(models.Model):
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
...
def save(self, *args, **kwargs):
if not self.created_by:
super_users = settings.AUTH_USER_MODEL.objects.filter(
is_superuser=True).order_by('date_joined')
first_user = super_users[0]
self.created_by = first_user
super().save(*args, **kwargs)
但我认为这不是导致迁移错误的原因。您可能想尝试 OneToOneField