Получение списка вариантов для поля модели django в vue.js интерфейс

#django #vue.js #django-models #django-rest-framework

#django #vue.js #django-модели #django-rest-framework

Вопрос:

Я использую django restframework на серверной части для создания API, к которому я получаю доступ из внешнего интерфейса, используя vue.js . У меня есть модель ‘Post’, которая хранит текст, а также имеет поле ‘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
)
  

Ответ №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)
  

В любое время, когда вы захотите получить список вариантов, это будет проще и быстрее!

Комментарии:

1. Привет! Спасибо за ответ. Я думаю, что это более или менее лучший вариант для моей проблемы. Я думаю, нет способа избежать выполнения отдельного вызова API для извлечения параметров. Также относительно вашего предложения переместить все варианты в отдельный класс, это тоже хорошая идея. я в основном следовал официальным документам django слово в слово, и мой подход является предпочтительным способом в соответствии с документацией.

Ответ №2:

Вы могли бы использовать django-js-choices.

Это автоматически считает все варианты в ваших моделях и создаст файл Javascript, который вы можете использовать Choices.pairs("choice_field") для получения всех пар значение / метка и Choices.display("choice_field", "field_value") для получения метки этого выбора.