【问题标题】:Getting list of choices for a django model field to a vue.js frontend将 django 模型字段的选项列表获取到 vue.js 前端
【发布时间】:2019-04-02 19:17:26
【问题描述】:

我在后端使用 django restframework 来创建一个我使用 vue.js 从前端访问的 API。我有一个存储文本的“发布”模型,还有一个字段“privacy_settings”。我已将隐私设置字段定义如下:

创建新帖子时在前端检索选项/选择的最佳方式是什么?

ONLYME = 'ME'
FRIENDS = 'FR'
PUBLIC = 'PU'
POST_PRIVACY_CHOICES = (
    (ONLYME, 'Onlyme'),
    (FRIENDS, 'Friends'),
    (PUBLIC, 'Public'),
)
privacy_setting = models.CharField(
max_length = 2,
choices = POST_PRIVACY_CHOICES,
default = ONLYME
)

【问题讨论】:

    标签: django vue.js django-models django-rest-framework


    【解决方案1】:

    您是否考虑过将您将在整个应用程序中使用的所有选择字典分离到另一个不同的文件(如choices.py)中的方法?

    无论如何,使用打开的操作 GET 创建一个像这样的特定视图,期望一个不错的query_parameter 加上一个可用options 的精选列表,这将是最好的选择。

        ONLYME = 'ME'
        FRIENDS = 'FR'
        PUBLIC = 'PU'
        POST_PRIVACY_CHOICES = (
            (ONLYME, 'Onlyme'),
            (FRIENDS, 'Friends'),
            (PUBLIC, 'Public'),
        )
    
        class ChoiceView(GenericAPIView):
    
            available_dicts = {
                "POST_PRIVACY_CHOICES": POST_PRIVACY_CHOICES,
            }
    
            def get(self, request):
                option = request.GET.get("option", None)
                if option is not None and option in self.available_dicts:
                    result_list = []
                    chosen_dict = available_dicts[option]
                    for i in chosen_dict:
                        key, value = i
                        tmp = {"key": key, "value": value}
                        result_list.append(tmp)
                    return Response(result_list, status=status.HTTP_200_OK)
                else:
                    return Response({"Error": "Empty or invalid option given"}, status=status.HTTP_400_BAD_REQUEST)
    

    任何时候你想检索一个选项列表,它会更容易和更快!

    【讨论】:

    • 嗨!感谢你的回答。我认为这或多或少是解决我问题的最佳选择。我想没有办法避免进行单独的 api 调用来检索选项。另外关于您将所有选择移到单独的班级中的建议,这也是一个好主意。我基本上是逐字遵循官方 django 文档,根据文档,我的方法是首选方式。
    【解决方案2】:

    你可以使用django-js-choices

    这将自动读取模型中的所有选项并创建一个 Javascript 文件,您可以在其中使用 Choices.pairs("choice_field") 获取所有值/标签对,并使用 Choices.display("choice_field", "field_value") 获取该选项的标签。

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 2021-09-18
      • 2016-05-02
      • 2019-01-14
      • 2019-08-09
      • 2011-02-04
      • 2019-12-04
      • 1970-01-01
      相关资源
      最近更新 更多