В настоящее время я использую представления классов для службы, которая использует внешние API, и сталкивается с проблемой с CreateView
, которая не поддерживает исходные данные между GET (рендерингом формы) и POST (выгрузка данных) ,Django CreateView, поддерживающий данные между запросами
Этот вид/маршрут фактически получает данные из веб-службы, и пользователю требуется показать данные и загрузить файл. Запрос вебсервис заворачивают в fetch
метод модели менеджера:
class OrderManager(models.Manager):
def fetch(self, user):
data = requests.get(...).json()
return dict(student=user,
foo=data['bar'])
И для CreateView
:
class OrderForm(ModelForm):
class Meta:
fields = ['picture']
model = Order
class OrderCreateView(LoginRequiredMixin, CreateView):
form_class = OrderForm
model = Order
def get_initial(self):
return self.model.objects.fetch(self.request.user)
Он отлично работает, когда пользователь нажимает GET /order/new/
он правильно делает данные, получаемые из webservice и представляет форму загрузки файла. Но когда форма отправляется, она снова запускает get_initial(...)
вместо сохранения данных из предыдущего запроса и снова обращается к веб-сервису.
Я хотел бы сохранить эти данные между запросами GET и POST, поэтому мне не нужно снова получать данные, как это возможно, с учетом классов и, желательно, без дополнительной работы? Я думал о кэшировании запросов, но на самом деле это не решает проблему, если пользователь просто слишком долго отправляет запрос.
Я не делал этот код для получения от менеджера, он уже был там и работал. В настоящее время страница работает, но с простым '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – ranisalt
@ranisalt, вы все равно не должны ожидать, что состояние будет храниться между запросами. Если вы дадите более подробную информацию, я могу привести более подробный пример ... но если вы почувствовали, что мой ответ помог, пожалуйста, отметьте как правильно. –