我正在 Django / SQL 中構建以下資料模型
Table 1 (Entity) - things that can do things
Entity ID:
Enum: (Person, or Business)
Table 2 (Person)
Entity ID:
Person ID:
Firstname
Lastname
Table 3 (Ltd Co.)
Entity ID:
Ltd Co. ID:
Company Name
Company No.
我正在嘗試將擁有 Limited Co. 的 Person 與也擁有 Limited Co. 的 Agent(也是 Person)聯系起來。所以 4 個不同的物體,其中兩個是 Person 型別,其中兩個是型別有限公司
我需要另一個鏈接表嗎?例如
| 個人資料 | 簡介有限公司 | 代理人 | 代理有限公司 |
|---|---|---|---|
| 物體 1:型別 = 人 | 物體 3:型別 = 業務 | 物體 2:型別 = 人 | 物體 4:型別 = 業務 |
問:如何在 Django 模型/或 SQL 中創建此鏈接表?
問:鏈接表是正確的方法嗎?
更新
這是我的 model.py 中的片段
class Entity(models.Model):
class EntityTypes(models.TextChoices):
PERSON = 'Person', _('Person')
COMPANY = 'Company', _('Company')
entity_type = models.CharField(
verbose_name='Legal Entity Type',
max_length=7,
choices=EntityTypes.choices,
default=EntityTypes.PERSON,
blank=False,
null=False)
class Person(models.Model):
related_entity = models.OneToOneField(Entity, on_delete=models.CASCADE)
first_name = models.CharField(verbose_name='First Name', max_length=50, blank=True, null=True)
last_name = models.CharField(verbose_name='Last Name', max_length=50, blank=True, null=True)
class LtdCo(models.Model):
related_entity = models.OneToOneField(Entity, on_delete=models.CASCADE)
company_name = models.CharField(verbose_name='Company Name', max_length=50, blank=True, null=True)
company_no = models.CharField(verbose_name='Company No.', max_length=50, blank=True, null=True)
uj5u.com熱心網友回復:
我想你需要的是ForeignKey. 您可以將一個Person物件鏈接到另一個物件。只需添加以下內容:
class Person(models.Model):
...
agent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, related_name='clients')
從現在開始,您可以簡單地將一個添加Person為agent另一個Person欄位。用法:
person_1 = Person.objects.create(...)
person_2 = Person.objects.create(..., agent=person_1)
person_1.clients.all()
# <QuerySet [<Person: Person 2>]>
person_2 in person_1.clients.all()
# True
person_2.agent
# <Person: Person 1>
person_2.agent.related_entity.entity_type
# 'Company' / 'Person'
.agent您可以通過所有客戶端與related_name您要使用的簡單或反向關系來訪問相關物件,在我的示例中是.clients. 請記住,反向關系始終是 a QuerySet,因為一個代理可以有多個客戶端,但每個客戶端可以有一個代理。關系在 Django 中非常強大,請按照此檔案了解詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/433985.html
標籤:sql django PostgreSQL
