Как отправить данные из списка в создание?

У меня проблема, я хочу передать параметры соответствующих полей из одного списка в форму для создания другого. Имена полей совпадают, но они не одинаковы в обоих списках, и я хотел бы передать только те, которые одинаковы. Пример - У меня есть список запросов и в этом списке у меня есть кнопка рядом с каждой записью. После нажатия кнопки я хочу перенаправить на форму добавления клиента, где у меня будут данные автозаполнения из списка запросов. Что я могу сделать?

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})
Вернуться на верх