例如,我的django应用程序中有2个主要模型:
class Employee(Model):
name = CharField(max_length=50)
class Client(Model):
title = CharField(max_length=50)
手机的抽象基类:
class Phone(Model):
number = CharField(max_length=10)
class Meta:
abstract = True
为Employee和Client继承了单独的类:
class EmployeePhone(Phone):
employee = ForeignKey(Employee, on_delete=CASCADE, related_name='employee_phones')
class ClientPhone(Phone):
client = ForeignKey(Client, on_delete=CASCADE, related_name='client_phones')
它可以工作,但我不喜欢它,我宁愿只保留一个Phone模型而不是3.我知道我可以使用Generic-Models但不幸的是,这不再是一个选项,因为我的应用程序实际上是REST-API并且在创建Parent-Object时似乎无法创建Generic-Object。那么有什么解决方案可以保持干净和干燥吗?
答案 0 :(得分:1)
其他答案提出了如何规范化数据库的好主意,但是如果你想保持模式相同并且避免在代码中重复相同的事情,那么custom field subclass可能是你的意思后?
示例:
# fields.py
class PhoneField(models.CharField):
def __init__(self, **kwargs):
kwargs.setdefault('max_length', 50)
...
super().__init__(**kwargs)
# models.py
class Employee(models.Model):
phone = PhoneField()
答案 1 :(得分:0)
如何保留1个电话类并通过外键将员工和客户链接到电话并删除摘要:)。
答案 2 :(得分:0)
如何将EmployeePhone
(ClientPhone
)作为与Employee
模型相关的Client
(Phone
)模型中的ManyToManyField移动?
class Employee(Model):
name = CharField(max_length=50)
phones = ManyToManyField(Phone, ...)