Django循环参考

时间:2014-12-30 01:28:00

标签: python django

我遇到过很多场景需要调整我的models.py文件以避免循环依赖。

这是最新的例子。我有registration / models.py,看起来像这样(为了简单起见,我删除了绝大多数代码):

from user_profile.models import UserProfile

class UserManager(BaseUserManager):

@transaction.atomic()  # We definitely do not want to create a User record without a UserProfile
def _create_user(self, email, **kwargs):

    user_profile = UserProfile.objects.create_user_profile(first_name, last_name)

    email = self.normalize_email(email)
    user = self.model(email=email,
                      **kwargs
                      )

    user.set_password(password)
    user.save()

    return user


class User(AbstractBaseUser, PermissionsMixin, TimeStampedModel):
     email = models.EmailField('email address',
                          max_length=user_model_settings.get('EMAIL_MAX_LENGTH'),
                          unique=True,
                          blank=False
                          )

    user_profile = models.OneToOneField(UserProfile,
                                    null=False,
                                    )

我后来才知道UserProfile模型(在user_profile.models.py中定义)应该指向User,而不是它当前的方式。

(最初,我在用户模型中有一个链接到图片模型的profile_picture列。我注意到,每当我删除图片记录时,用户记录就开始消失。这是由于级联删除。我将外键翻转,以便图片指向用户,并希望使用UserProfile执行相同的操作。)

不幸的是,如果user_profile / models.py导入registration / models.py,那么registration / models.py就无法再导入user_profle / models.py,因此无法再使用UserProfile管理器在其管理器中创建UserProfile记录

我知道这两个模型紧密耦合......它们应该只是在同一个应用程序中吗?如何防止此类问题。我已经看到第三方框架将他们的经理拆分成单独的文件,但如果我这样做,我仍会遇到同样的问题。我该如何解决这个问题?

我想我只需要一点指导。我对大型应用程序的经验很少,而且之前不必以复杂的方式管理依赖项。

谢谢你的帮助, 尼克

编辑:我应该注意,我知道我可以通过在_create_user函数中导入user_profile.models来解决所有这些问题,但据我所知,这是不好的做法。

0 个答案:

没有答案