指向一个数据库表的两个模型-冗余代码[Django 2.1]

时间:2019-07-18 14:28:19

标签: python django python-3.x django-models django-2.1

我正在处理公司前雇员制作的Django项目(因此,我重构了一个不遵循Django最佳实践的其他人制作的整个项目),该项目在不同的应用程序上有两个模型在数据库上使用相同的表。两个应用程序都使用了城市和州表。

我想知道哪种方法是应用DRY概念的最佳方法,并且两个应用程序只能使用一种模型访问这些表。

这两个应用程序位于项目文件夹中,每个应用程序都有自己的models.py,其中包含以下城市/州的代码:

from django.db import models
from django.contrib.auth.models import User,Group
from django.db.models.signals import post_save
from django.dispatch import receiver

class state(models.Model):
    class Meta:
        db_table = '"db_property"."state"'
    created_at = models.DateTimeField(db_column='created_at')
    updated_at = models.DateTimeField(db_column='updated_at')
    name = models.CharField(db_column='name',max_length=50)

class city(models.Model):
    class Meta:
        db_table = '"db_property"."city"'
    created_at = models.DateTimeField(db_column='created_at')
    updated_at = models.DateTimeField(db_column='updated_at')
    name = models.CharField(db_column='name',max_length=50)
    state = models.ForeignKey(state,on_delete=models.CASCADE)

谢谢!

1 个答案:

答案 0 :(得分:2)

我想念什么吗?

citystate放在一个或其他应用程序中,甚至在自己的citystate应用程序中,然后从定义的位置导入它们。在名为foo的应用中:

from citystate.models import city, state

顺带一提,Django模型是class,因此通常会以大写字母CityState开头。遵循这样的约定:您可能还不会感到困惑(但是),但是您会混淆阅读此代码的其他人,他们会认为导入的这些东西是函数而不是类!

应用程序不需要具有任何视图,URL等。它可以只是放置常见模型及其迁移以及某些管理类的地方。