簡體   English   中英

Django抽象模型-如何在抽象視圖方法中實現特定的訪問?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM