Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将属性添加到django中其他应用程序的模型_Django_Django Models_Django Rest Framework - Fatal编程技术网

将属性添加到django中其他应用程序的模型

将属性添加到django中其他应用程序的模型,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我目前正在从事一个项目,该项目应该部署到几个配置和功能略有不同的不同客户端。为了实现这一点,我想在django中为每个功能创建一个新的应用程序。例如,我们有一个基本应用程序,其中包含一个用于患者的模型(非常简单,名称、id等)。对于一些客户,我想创建一个父应用程序,其中包括一个名为case\u type的附加应用程序,其中包含一个名为CaseType的模型。在该应用程序中,一名患者可以有一个病例类型 但问题是。患者应用程序应与病例类型应用程序配合使用或不配合使用。因此,我想从case\u typ

我目前正在从事一个项目,该项目应该部署到几个配置和功能略有不同的不同客户端。为了实现这一点,我想在django中为每个功能创建一个新的应用程序。例如,我们有一个基本应用程序,其中包含一个用于
患者的模型(非常简单,名称、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')