0

У меня есть две формы: одна, которая берет информацию о пользователе (имя, дата рождения и т. Д.): FormA. И еще один, который содержит текстовое поле, пользователь может вводить текст в: formB.Django сохраняет 2 формы на одной странице, автоматически заполняет внешний ключ

модель formB имеет фактическое текстовое поле и «имя», которое связывает его с пользователем, которому принадлежит этот текст. Это поле называется text_name. text_name - это внешний ключ, связанный с моделью Name (связанный с formA).

В шаблоне моего взгляда я разрешаю пользователю видеть текстовое поле, в которое они могут вводить информацию из формыB, и они также могут видеть все поля в formA. Это означает, что раскрывающийся список text_name не отображается.

formA в настоящее время предварительно заполняется данными с другого сеанса.

Это мое мнение:

def name(request): 

    ses = request.session.get('ses', None) 

    formA = Name_Form(request.POST, instance = ses) 
    formB = Text_Form(request.POST or None) 
    formB.text_name = ses 

    if request.method == 'POST': 
      formB.text_name = ses 
      if formA.is_valid() and formB.is_valid(): 
        formB.note_job = ses 
        a = formA.save() 
        a.save() 
        b = formB.save() 
        b.save() 

FormB не действует, потому что TEXT_NAME не заселяется. Я попытался заполнить эту строку:

formB.text_name = ses 

но это не сработало.

Как автоматически заполнить текстовое имя с информацией, введенной уже без фактического отображения текстового имени в моем шаблоне и, следовательно, заставить пользователя фактически выбрать соответствующее текстовое имя вручную.

ответ

1

Если вы хотите, чтобы сделать дополнительную обработку на модели экземпляра ModelForm перед сохранением, есть по крайней мере два простых варианта:

  1. получить доступ к ModelForm экземпляра модели перед сохранением через form.instance: formB.instance.text_name = ses; formB.save()

  2. Сохранить вручную с commit=False: objB = formB.save(commit=False); objB.text_name = ses; objB.save(), в этом случае убедитесь, что Text_Form имеет 'TEXT_NAME' в это excluded field list.

+0

Я бы поставил это внутри инструкции is_valid if или раньше? – JohnnyCash

+0

никогда не думал, что я понял! и это работает! благодаря тонну :) – JohnnyCash

Смежные вопросы