[英]Django abstract models - how to implement specific access in abstract view method?
假設我在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
方法調用?
您可以創建將模型類映射到每個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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.