如何从模型中预填充Django表单

时间:2020-03-04 16:40:25

标签: django django-forms

我有一个从模型生成的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 :(得分:0)

您可以通过在更改用户字段时提交表单来执行此操作,也可以使用Ajax异步执行此操作。两者都需要一点JavaScript代码。第一个选项要求您使用模型形式。这些步骤非常标准。

  1. 提交用户数据
  2. 在您的数据库中查找用户
  3. 将用户实例加载到模型窗体中
  4. 将表单传递给上下文变量

对于Ajax,请搜索有关Ajax的教程,然后在SO上查看this answer

在您的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)