Как предварительно заполнить форму Django из модели - PullRequest
0 голосов
/ 04 марта 2020

У меня есть форма Django, сгенерированная из модели

model.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    telephone = models.CharField(max_length=15, blank=True)
    email_address = models.CharField(max_length=30, blank=True)
    date_of_birth = models.DateField(null=True, blank=True)

enter image description here

Пользователь Dropbox заполняется (автоматически) из пользователей

Как можно предварительно заполнить форму из модели Профиль при выборе пользователя?

1 Ответ

0 голосов
/ 04 марта 2020

Вы можете сделать это, отправив форму при каждом изменении пользовательского поля, или вы можете использовать Ajax, чтобы сделать это асинхронно. Оба требуют немного кода JavaScript. Первый вариант требует использования формы модели. Шаги довольно стандартные.

  1. Отправка данных пользователя
  2. Поиск пользователя в вашей базе данных
  3. Загрузка пользовательского экземпляра в форму модели
  4. Передача формы в контекст переменная

Для Ajax найдите учебники по Ajax и посмотрите этот ответ по SO.

В вашем HTML:

<select name="user_selector" id="userDropDown" class=" whatever-custom-css-class" autofocus onChange="this.form.submit();">

Затем, внутри своего запроса, вы можете

user_name = self.request.GET.get('user_selector', None)
if user_name:
    try:
        selected_user = User.objects.get(username = user_name)

    except ObjectDoesNotExist:
        # No such user. 
        selected_user = None

if selected_user:
    contact_form = ContactForm(instance = selected_user)
    ...
    context.update({'form': contact_form})
    return render(request, self.template_name, context)
...