将属性添加到django中其他应用程序的模型
我目前正在从事一个项目,该项目应该部署到几个配置和功能略有不同的不同客户端。为了实现这一点,我想在django中为每个功能创建一个新的应用程序。例如,我们有一个基本应用程序,其中包含一个用于将属性添加到django中其他应用程序的模型,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我目前正在从事一个项目,该项目应该部署到几个配置和功能略有不同的不同客户端。为了实现这一点,我想在django中为每个功能创建一个新的应用程序。例如,我们有一个基本应用程序,其中包含一个用于患者的模型(非常简单,名称、id等)。对于一些客户,我想创建一个父应用程序,其中包括一个名为case\u type的附加应用程序,其中包含一个名为CaseType的模型。在该应用程序中,一名患者可以有一个病例类型 但问题是。患者应用程序应与病例类型应用程序配合使用或不配合使用。因此,我想从case\u typ
患者的模型(非常简单,名称、id等)。对于一些客户,我想创建一个父应用程序,其中包括一个名为case\u type
的附加应用程序,其中包含一个名为CaseType
的模型。在该应用程序中,一名患者可以有一个病例类型
但问题是。患者
应用程序应与病例类型
应用程序配合使用或不配合使用。因此,我想从case\u type
应用程序中向Patient
的模型和序列化程序中“注入”一个新属性。因此,当使用case\u type
应用程序部署时,用户在调用/patient/
时将收到类似的JSON:
但是,当在没有case\u type
应用程序的情况下调用相同的路由时,我希望它返回
{
"name": "Bob",
"id": "123"
}
这意味着我必须以“依赖注入”的方式动态地调整序列化程序和模型。有多种情况,这样的用例对于这个应用程序来说是有意义的。
我可以在相应的应用程序中引用病例类型
模型,但这将导致必须为每个客户调整代码本身,并创建大量重复代码(一个患者应用程序具有病例类型,一个没有)
对于如何在django中解决这样的模块化问题,您还有其他想法吗?通过“应该部署到多个不同的客户机”我知道您将有一个单独的代码库和不同的环境用于每个部署
假设如此,我将采用以下方法:
- 通过在
案例类型
模型上提供患者
参考,对依赖的应用程序和模型进行建模,使案例类型
依赖于患者
,而不是相反
- 对于患者的序列化程序,可以根据环境动态创建类:
{
"name": "Bob",
"id": "123"
}
class CaseType(models.Model):
...
patient = models.OneToOneField(Patient, on_delete=models.CASCADE, related_name='case_type')
class PatientSerializer(serializers.ModelSerializer):
class Meta:
model = Patient
fields = PatientSerializer.generate_fields()
@staticmethod
def generate_fields():
fields = ['id', 'name']
if os.environ.get('CASE_TYPE', False):
fields.append('case_type')