首页 > 解决方案 > 是否可以在没有 makemigrations 的情况下使用 django 运行服务器?

问题描述

我正在尝试将我的项目分成多个子项目。

用户模型已更改。我只删除了一些不必要的字段。没有新添加的字段或修改的字段数据。

从现有的主项目中,我完成了 makemigrations 并将它们全部迁移。

例如,主项目的 models.py 文件中的用户模型如下所示。

class User(AbstractBaseUser):
  password = models.CharField('password', max_length=128, blank=True)
  username = models.CharField('username', max_length=50, unique=True)
  email = models.EmailField('email_address', blank=True)
  phone = PhoneNumberField('phone', blank=True)
  address = models.CharField('address', blank=True)

python manage.py makemigrationspython manage.py migrate已全部完成,因此用户模型已在我的数据库中设置。


在新的子项目中,模型将如下所示。

class User(AbstractBaseUser):
  password = models.CharField('password', max_length=128, blank=True)
  username = models.CharField('username', max_length=50, unique=True)
  email = models.EmailField('email_address', blank=True)

该型号位于/sub-project/accounts/models.py

它是在以下步骤中生成的

  1. django-admin startproject sub-project

  2. python manage.py startapp accounts

因此,新的子项目与原基础项目完全分离。

但是,子项目也连接到原始基础项目正在使用的同一数据库。

如果我python manage.py runserver这个子项目,

ValueError: Dependency on app with no migrations: {application name} 发生。

如果我运行服务器正常工作python manage.py makemigrations

我有什么方法可以不进行迁移并运行我的子项目服务器吗?

我不想进行迁移,因为我仍在为主项目使用相同的数据库,并避免任何错误,例如迁移子项目的迁移。

标签: pythondjango

解决方案


听起来您不应该创建新的用户模型,而是使用 Profile/Employee/Customer 模型对其进行扩展。

有关如何制作一对一 Profile 模型的信息,请参阅https://docs.djangoproject.com/en/3.1/topics/auth/customizing/#extending-the-existing-user-model 。

仅当您需要更改用户向您的站点进行身份验证的方式时,才应更改 Django 中的用户模型。

所以你的主要项目变成了这样:

class Profile(Model):
    user = models.ForeignKey(User)  # or even better settings.AUTH_USER_MODEL
    phone = PhoneNumberField('phone', blank=True)
    address = models.CharField('address', blank=True)

并且您不对默认用户模型进行任何更改。


推荐阅读