通过从抽象类

时间:2018-01-06 21:24:50

标签: django django-models django-users

我有以下抽象类:

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)

1 个答案:

答案 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