Django сохранить 2 формы на одной странице, заполнить внешний ключ автоматически - PullRequest
0 голосов
/ 23 февраля 2012

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

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

В шаблоне моего представления я только позволяю пользователю видеть текстовое поле, в которое он может вводить информацию из formB, и он также может видеть все поля в 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 недопустим, так как текстовое имя не заполняется. Я пытался заполнить с помощью этой строки:

formB.text_name = ses

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

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

1 Ответ

1 голос
/ 23 февраля 2012

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

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

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

...