让我们说我在Django中有一个抽象模型,其中有两个模型延伸出来。
在Django Rest Framework通用视图中,如何控制两个实现模型之一的创建?
我的解决方案如下:
from enum import Enum
from rest_framework.views import APIView
class BazType(Enum):
FOO = 1
BAR = 2
class AbstractView(APIView):
def __init__self():
#Init code here
def _internal_method(self, django_model, this_type = BazType.FOO):
if this_type == BazType.FOO:
record, created = ConcreteModelOne.objects.get_or_create(some_field = django_model)
elif this.type == BazType.BAR:
record, created = ConcreteModelTwo.objects.get_or_create(some_field = django_model)
它有效,但有没有办法摆脱if / else块?换句话说,是否有一种方法,从AbstractView
的子类,传递一些标识符,以便get_or_create
方法调用需要哪个模型?
答案 0 :(得分:1)
您可以创建一个映射/字典,将模型类映射到每个Enum
成员的值,并在_internal_method
中使用它来获取给定Enum
名称的模型类:
class AbstractView(APIView):
models_map = {1: ConcreteModelOne, 2: ConcreteModelTwo}
def __init__(self):
#Init code here
def _internal_method(self, django_model, this_type=BazType.FOO):
record, created = self.models_map[this_type].objects.get_or_create(some_field = django_model)