我有以下抽象类:
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:
我认为出现的循环错误是因为:
帐户通过从UserStamp继承created_by,updated_by来调用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)
答案 0 :(得分:1)
您可以通过修改模型的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