【问题标题】:How to separate the model into two applications如何将模型分成两个应用程序
【发布时间】:2015-03-26 03:10:35
【问题描述】:

我有一个应用程序和一个模型。 我想在两个应用程序上分离模型,以便从单独的应用程序管理用户。 难道转移这个模型就行了?我该怎么办?

class User(AbstractUser):

    country = models.CharField(max_length=2, choices=COUNTRY, default=RUSSIA)

这是我的 models.py - 必须分开

RUSSIA = 'RUS'
USA = 'USA'
GERMANY = 'GER'


COUNTRY = (
    (RUSSIA, "Russia"),
    (USA, "USA"),
    (GERMANY, "Germany"),
)

class User(AbstractUser):

    country = models.CharField(max_length=2, choices=COUNTRY, default=RUSSIA)


class Country(models.Model):

    country = models.CharField(max_length=3, choices=COUNTRY, default=RUSSIA)
    name_of_team = models.CharField(max_length=255, blank=True, null=True)

    def __unicode__(self):
        return self.name_of_team

【问题讨论】:

  • 你的意思是有两个应用程序有两个模型(一个用于用户,一个用于国家)?
  • @Andres 我有一个应用程序有两个模型。我希望在这些应用程序之间有两个独立的应用程序和第一个应用程序的模型。

标签: python django django-models models


【解决方案1】:

您可以创建两个应用程序,一个用于用户,一个用于国家。然后将 User 模型放在 Users 应用中,将 Country 模型放在 Country 应用中。

然后在第三个应用程序中,您可以根据需要导入它们:

from countries.models import Country
from users.models import User

将这部分代码放到settings.py文件中:

RUSSIA = 'RUS'
USA = 'USA'
GERMANY = 'GER'


COUNTRY = (
    (RUSSIA, "Russia"),
    (USA, "USA"),
    (GERMANY, "Germany"),
)

如果您这样做,那么您可以像这样从两个应用程序访问常量:

from django.conf import settings

settings.COUNTRY

【讨论】:

  • 谢谢 :) 请告诉我创建多个应用程序后如何迁移数据库?当执行 python manage.py makemigrations my_new_app 时,我收到错误:“LookupError: App 'my_new_app' does not have a 'user' model.”
【解决方案2】:

您可以创建两个应用程序,一个用于用户,一个用于国家,然后您只需将国家模型导入用户模型。

此外,如果您想保持国家和用户之间的关系,您应该使用 ForeignKey。抱歉,如果它与您的逻辑不匹配,但我不确定您的模型必须是什么样子,这对我来说有点陌生。

类似这样的:

国家/地区/models.py

RUSSIA = 'RUS'
USA = 'USA'
GERMANY = 'GER'

COUNTRY = (
    (RUSSIA, "Russia"),
    (USA, "USA"),
    (GERMANY, "Germany"),
)


class Country(models.Model):
    # I don't know why country attr in Country class
    country = models.CharField(max_length=3, choices=COUNTRY, default=RUSSIA)
    name_of_team = models.CharField(max_length=255, blank=True, null=True)

    def __unicode__(self):
        return self.name_of_team

用户/models.py

from country.models import Country

class User(AbstractUser):
    # ForeignKey, here you make the relation with country model
    country = models.ForeignKey(Country)

【讨论】:

  • 当我想制作 python manage.py makemigration my_new_app 时出现错误:ImportError: No module named my_new_app.models - 我使用 Country 在我的模型中导入
  • 您的应用名称是什么?将 my_new_app 替换为您的应用名称
  • 好的,现在可以了,但是请告诉我创建多个应用程序后如何迁移数据库?当执行 python manage.py makemigrations my_new_app 时,我收到错误:“LookupError: App 'my_new_app' does not have a 'user' model.
猜你喜欢
  • 2022-10-19
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2012-02-25
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多