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

如何从模型中预填充Django表单,django,django-forms,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)

我有一个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)

用户下拉框由用户(自动)填充


当我选择用户时,如何从概要文件模型中预填充表单?

您可以在用户字段发生更改时提交表单,也可以使用Ajax异步执行此操作。两者都需要一点JavaScript代码。第一个选项要求使用modelform。这些步骤相当标准

  • 提交用户数据
  • 在数据库中查找用户
  • 将用户实例加载到模型表单中
  • 将表单传递给上下文变量
  • 对于Ajax,请搜索Ajax教程,然后参见等等

    在HTML中:

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

    你能详细说明你想做什么吗?您可以选择一个用户,并根据某个用户或其他模型填充其他字段。我可以想到的另一种情况是,您正在尝试更新配置文件,但字段没有填充。@schillingt Question updated。这更清楚了吗?那么你在更新现有的个人资料?唯一的方法是在用户每次更改下拉列表的值时发出ajax请求,以获取相应用户的配置文件,如果存在,则更新javascript中的字段。查找ajax+django。
    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)