问题是概念性的(数据库关系),因此语言不是这里的重点,但我正在使用 Python 和 Django。
我有 3 个模型/桌子:
公司
顾客
地址
例如。
class Company(models.Model):
name = models.CharField(max_lenght=100) #example
class Customer(models.Model):
name = models.CharField(max_lenght=100) #example
class Adress(models.Model):
country = models.CharField(max_lenght=100) #example
state = models.CharField(max_lenght=100) #example
# here I want the address owner
# I could put something like this:
company = models.ForeignKey(Company, on_delete=models.PROTECT)
customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
我希望该地址属于客户或公司,但不能同时属于两者。
我知道我可以简单地创建 2 个地址类,例如 CustomerAddress、CompanyAddress,每个类都有其正确的外键:
class Company(models.Model):
name = models.CharField(max_lenght=100) #example
class Customer(models.Model):
name = models.CharField(max_lenght=100) #example
class CompanyAdress(models.Model):
country = models.CharField(max_lenght=100) #example
state = models.CharField(max_lenght=100) #example
company = models.ForeignKey(Company, on_delete=models.PROTECT)
class CustomerAdress(models.Model):
country = models.CharField(max_lenght=100) #example
state = models.CharField(max_lenght=100) #example
customer = models.ForeignKey(Company, on_delete=models.PROTECT)
但我不想这么做,原因有两个:
重复的代码以及在 Django 管理面板中我将有两个单独的地址列表的事实,这没有多大意义,因为所有地址在结构上都是相同的。我可以修复创建基类、继承基类等的重复代码,但我在管理面板中仍然会有 2 个列表。
将来我可能会遇到同样的概念性问题,但会更加复杂,例如,某些事物有 300 个类,而 1 个类应该只有 300 个类中的一个具有外键。
我应该怎么办?
牧羊人nacy
千万里不及你
相关分类