这是为内部Django应用程序的现有数据库(基于Server )设置一些基本CRUD功能的初步尝试。我想要关于模型定义的建议,这些定义将支持一个主表,该表包含一个贸易伙伴列表,并标识了一个合作伙伴类型。事实上,合作伙伴可以有多种类型。例如,客户也可以是供应商。然后有一个相关的PartnerTypes表,它提供了一些额外的细节,但主要是分配给PartnerType的文本描述/名称。
当我使用Django的inspectdb命令时,我得到了预期的结果,并且在模型中设置了ForeignKeys。
我想知道是否有可能在Model中包含某种类型的“筛选”,以便跨不同的类使用相同的表。
例如,为客户端创建一个模型类(例如。Client_Partner),然后是供应商的另一个(如。Supplier_Partner)它们都指向相同的底层合作伙伴表,但允许为每种“类型”的合作伙伴生成单独的表单?
在创建新客户端期间,TypeId需要预先填充适当的TypeID。
我知道,不使用Admin Interface可能更合适,但由于我是Django的新手,而且这是一个内部项目,我认为有可能‘开始运行’,并根据一组基本静态的主数据表获得一些数据输入。
预先感谢(恐怕我从例子中学到了最好的东西,因此,虽然我已经阅读了许多帖子和一些文档,但如果没有一些我可以遵循的基本示例形式,我仍然感到迷茫)。
示例表数据(在本例中,公司A既是客户也是供应商)
+--------+-----------------------+---------+
| TypeID | Type | Code |
+--------+-----------------------+---------+
| 0 | Parent | PARENT |
| 1 | Client | CLI |
| 2 | Supplier | SUPP |
+--------+-----------------------+---------+
+-----------+--------------------+--------+-----------+
| PartnerID | name | TypeID | Code |
+-----------+--------------------+--------+-----------+
| 1 | Our Company | 0 | US |
| 10 | Company A | 1 | CA |
| 20 | Company A | 2 | CA |
| 30 | Company B | 2 | CB |
+-----------+--------------------+--------+-----------+生成Django模型
class Trading_Partner(models.Model):
partnerid = models.IntegerField(db_column='PartnerID', primary_key=True)
code = models.CharField(db_column='Code', max_length=10, blank=True, null=True)
name = models.CharField(db_column='Name', max_length=150, blank=True, null=True)
typeid = models.ForeignKey('Trading_Partner_Type', models.DO_NOTHING, db_column='TypeID', blank=True, null=True)
lei = models.CharField(db_column='LEI', max_length=20, blank=True, null=True)
class Meta:
managed = False
db_table = 'Partner'
class Trading_Partner_Type(models.Model):
typeid = models.IntegerField(db_column='TypeID', primary_key=True)
type = models.CharField(db_column='Type', max_length=50, blank=True, null=True)
code = models.CharField(db_column='Code', max_length=20, blank=True, null=True)
class Meta:
managed = False
db_table = 'PartnerType'发布于 2019-03-28 11:21:45
要区分不同类型的合作伙伴,可以使用代理模型。
class PartnerManager(models.Manager):
def __init__(self, partner_type):
super().__init__()
self.partner_type = partner_type
def get_queryset(self):
return super().get_queryset().filter(typeid=self.partner_type)
class Client_Partner(Trading_Partner):
objects = PartnerManager(1)
class Meta(Trading_Partner.Meta):
proxy = True
class Parent_Partner(Trading_Partner):
objects = PartnerManager(0)
class Meta(Trading_Partner.Meta):
proxy = True
class Supplier_Partner(Trading_Partner):
objects = PartnerManager(2)
class Meta(Trading_Partner.Meta):
proxy = True但我不知道在非托管模型下这是否可能。
https://stackoverflow.com/questions/55389115
复制相似问题