连接 Django 模型选择字段与 React js 选择选项的最佳方法是什么

DUM*_*MBA 5 django django-rest-framework reactjs

我发现自己陷入了处理 Django 模型选择字段和反应选择选项的困境。愿有人好心帮忙。这是我的模型代码:

class AccountType(models.Model):

    category = models.SmallIntegerField(
        choices=(
            (AccountCategories.ASSET, "Asset"),
            (AccountCategories.LIABILITY, "Liability"),
            (AccountCategories.EQUITY, "Equity"),
            (AccountCategories.REVENUE, "Revenue"),
            (AccountCategories.EXPENSE, "Operating Expense"),
        )
    )

    classification = models.SmallIntegerField(
        choices=(
            (AccountClassifications.NONE, ""),
            (AccountClassifications.CURRENT, "Current"),
            (AccountClassifications.NONCURRENT, "Long-Term"),
        )
    )

Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何使这些选择成为我在 React 形式中的选择选项。我在想也许解决方案可能是在我的序列化器中验证或清理这些选择,但我坚持如何特别是与反应表单链接。提前致谢

DUM*_*MBA 2

所以我想起了 Beazley 的 Python 内置超级英雄教程或类似的东西,并想出了这个解决方案。就 DRY 原则而言,可能不是最好的,但它就像一种魅力,对于那些在同一问题上苦苦挣扎而又没有其他办法的人来说,我是这样做的:

  ACCOUNT_TYPES_CATEGORY_CHOICES = [
        (100, 'Do Not Choose Me'),
        (0, 'Asset'),
        (1, 'Liability'),
        (2, 'Equity'),
        (3, 'Revenue'),
        (4, 'Operating Expense')

    ]
Run Code Online (Sandbox Code Playgroud)

我将这些选择放在一个单独的文件中。

class AccountType(models.Model):
    class Meta:
        ordering = ['order']

    objects = AccountTypeManager()

    category = models.IntegerField(choices=ACCOUNT_TYPES_CATEGORY_CHOICES)

    classification = models.IntegerField(choices=ACCOUNT_TYPES_CLASSIFICATION_CHOICES)

Run Code Online (Sandbox Code Playgroud)

我导入了该文件并将其放入我的模型中并调用 python manage.py makemigrations

 class AccountingPeriodsChoicesAPIView(views.APIView):


    def get(self, request, format=None):

        my_choices = []
        choice_dict = dict(ACCOUNTING_PERIODS_CHOICES)
        for key, value in choice_dict.items():

            itered_dict = {"key": key, "value": value}
            my_choices.append(itered_dict)
        return Response(my_choices, status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

我为它创建了一个 api 端点。我知道这可能工作量太大,但确实有效。将其转换为字典,然后通过 .items() 将其解包,分配值和键,然后在 Response 中返回它就可以了。将其称为端点允许我在 redux 状态下管理它并执行它应该执行的操作。维奥拉!!!!