Отправить значение свойства модели в другую модель и отобразить его в ее форме
Я работаю над приложением, где пользователь заполняет первую форму модели, и он будет перенаправлен на следующую форму, где я хочу получить значение из свойства первой модели, которое будет передано второй модели и отобразить его в ее форме.
Есть ли способ получить экземпляр доставки в DetailleDelivery (ключ счета и расстояние) и отобразить их пользователю, когда он заполняет DeliveryDetailsForm? Я хочу избежать многократного обращения к БД для получения одних и тех же данных, если это возможно.
В вашей DetailsDeliveryCreateView
задайте начальные значения формы:
def get_initial(self):
initial = super(DetailsDeliveryCreateView, self).get_initial()
initial = initial.copy()
delivery = Delivery.objects.get(id=self.kwargs["pk"])
distance = delivery.distance["google_distance"]
initial['distance'] = delivery
initial['distance'] = distance
return initial
Вы можете просто передать доставку в контекст, например, так:
context ['delivery'] = delivery
Затем в своем шаблоне вы можете использовать {{delivery.distance}} и все остальное, что вам нужно. У вас будет весь объект.
Очевидно, что это относится только к представлению create, где связанный родительский объект еще не существует. В детальном представлении вы имеете доступ к родителю через дочерний объект.
Также вы можете использовать get_object_or_404 вместо filter для получения экземпляра Delivery, на случай, если кто-то попытается использовать несуществующий pk.
Более того, вместо того, чтобы вставлять доставку в форму, просто оставьте ее совсем и переопределите form_valid(), чтобы вставить отношения доставки до сохранения, если это имеет смысл.