Как отправить данные из списка в создание?
У меня проблема, я хочу передать параметры соответствующих полей из одного списка в форму для создания другого. Имена полей совпадают, но они не одинаковы в обоих списках, и я хотел бы передать только те, которые одинаковы. Пример - У меня есть список запросов и в этом списке у меня есть кнопка рядом с каждой записью. После нажатия кнопки я хочу перенаправить на форму добавления клиента, где у меня будут данные автозаполнения из списка запросов. Что я могу сделать?
def add_customer_from_list(request, pk):
application = Contact.objects.get(id=pk) #data from Contact list
form = CustomerForm(request.POST, instance=application)#to CustomerForm
if form.is_valid():
name = form.cleaned_data['name'] #same
email = form.cleaned_data['email'] #same
phone_number = form.cleaned_data['phone_number']#same
address = form.cleaned_data['address']
dog_name = form.cleaned_data['dog_name']#same
dog_age = form.cleaned_data['dog_age']
service_type = form.cleaned_data['service_type']#same (multi choice)
training_place = form.cleaned_data['training_place']
contact_date = form.cleaned_data['contact_date']
source = form.cleaned_data['source']
status = form.cleaned_data['status']
notes = form.cleaned_data['notes']
customer = Customer(name=name, email=email, phone_number=phone_number, address=address, dog_name=dog_name,
dog_age=dog_age, service_type=service_type, training_place=training_place,
contact_date=contact_date, source=source, status=status, notes=notes)
customer.save()
return redirect('xxx')
return render(request, 'xxx', {'form': form})
Я пытаюсь сделать что-то в представлении и шаблонах
Существует несколько различных способов решения этой проблемы, но одним из возможных решений является создание связки между полями в списке запросов и полями в форме клиента. Затем вы можете использовать это сопоставление для передачи только соответствующих данных из запроса в форму клиента при нажатии кнопки.
Создайте словарь для сопоставления полей в запросе с полями в форме клиента:
request_to_customer_mapping = {
'request_name': 'customer_name',
'request_email': 'customer_email',
'request_address': 'customer_address',
'request_phone': 'customer_phone'
}
В обработчике события кнопки получите данные для выбранного запроса и создайте новый объект клиента:
def on_button_press(request_id):
request_data = get_request_data(request_id)
customer_data = {}
for request_field, customer_field in request_to_customer_mapping.items():
if request_data.get(request_field):
customer_data[customer_field] = request_data[request_field]
new_customer = Customer(**customer_data)
redirect_to_customer_form(new_customer)
В этом примере функция on_button_press принимает в качестве параметра ID выбранного запроса. Она использует этот ID для получения данных для запроса с помощью функции get_request_data (которую вам нужно будет реализовать). Затем она создает пустой словарь для хранения данных нового клиента.
Затем выполняется итерация по словарю request_to_customer_mapping, используя ключи (поля запроса) для поиска соответствующих значений в данных запроса. Если поле существует в данных запроса, оно копирует значение в соответствующее поле в словаре данных клиента.
Наконец, он создает новый объект customer, используя синтаксис **customer_data для передачи данных в качестве аргументов ключевых слов, и перенаправляет пользователя на форму customer с параметром new_customer.
Это лишь один пример того, как можно реализовать эту функциональность, и могут быть другие способы подхода к проблеме в зависимости от ваших конкретных требований.
Надеюсь, это поможет!
Я написал нечто подобное, но столкнулся с двумя проблемами. Как правильно валидировать в IF? И как отправить готовый словарь на форму?
def add_customer_from_list(request, pk):
request_data = get_object_or_404(Contact, id=pk)
form = CustomerForm(request.POST)
customer_data = {}
for request_field, customer_field in request_to_customer_mapping.items():
if request_data(request_field): #here is problem
customer_data[customer_field] = request_data[request_field]
new_customer = Customer(**customer_data) # and how send to form this data \/
return render(request, 'xxx', {'form': form})