#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")
для получения метки этого выбора.