【问题标题】:How to populate(get the data filled) the modelform with the user data?如何用用户数据填充(填充数据)模型表单?
【发布时间】:2019-01-29 10:18:49
【问题描述】:

这是我的models.py

from django.db import models
from django.contrib.auth.models import User

class User_data(models.Model):

    user_ID = models.CharField(max_length = 20)
    name = models.CharField(max_length = 50)
    user = models.ForeignKey(User, on_delete = models.CASCADE, null =True)

    def __str__(self):
        return self.name

这是我的forms.py

from django import forms
from lrequests.models import User_data

class UserForm(forms.ModelForm): 
    class Meta:
        fields = ("name", "user_ID")

        model = User_data

这是我的views.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import UserForm
from django.shortcuts import render_to_response
from .models import User_data

def get(request):
    form_class = UserForm
    if request.method == "POST":
        form = UserForm(request.POST)
        if form.is_valid():
            data = form.save(commit = False)
            data.user = request.user
            form.save()
        return HttpResponse("Sucessfully submitted")
    else:
        form = UserForm()
        return render(request, "request_form.html", {'form' : form_class})

#update
def auto_fill_form(request):
form = UserForm(initial = dict(name = request.user.first_name))
context = dict(form=form)
return render(request, "request_form.html", context)

现在,我尝试填充在创建帐户时指定的用户数据。因此,他(用户)不会篡改数据(因为它需要只读)并且在没有用户输入的情况下自动填充。我已阅读 django 文档,但它仅指定动态初始化数据 see here。我已经尝试将该代码放在 forms.py 中,但没有成功。

我什至在 HTML 模板中尝试过,也没有用。

            {% csrf_token %}
            <div class="form-row">
                {{ form.name.errors }}
                {{ form.name.label_tag }} {{ form.name = user.first_name }}
            </div>
            {% comment %} {{ form.as_p }} {% endcomment %}

默认情况下如何将数据导入表单? 有人可以帮我解决这个问题吗?

【问题讨论】:

  • @MohitSolanki 否定!
  • 什么是{'form' : form_class}?应该是{'form' : form}
  • @hygull form_class = UserForm 在views.py中
  • 访问页面会向服务器发出 GET 请求,因此 else 部分将在您创建 form 但您没有使用它的地方执行,为什么?请尝试让我们知道。也看看docs.djangoproject.com/en/2.1/topics/forms。这适用于 Django 2.1。根据您的 Django 版本,您只需将地址栏中的版本更改为您的版本即可切换到它。

标签: python django django-models django-forms modelform


【解决方案1】:

只需替换

else:
    form = UserForm()
    return render(request, "request_form.html", {'form' : form_class})

作者:

else:
    return auto_fill_form(request)

【讨论】:

  • 如果我有更多需要手动填写的字段怎么办?
  • NameError: name 'auto_fill_form' is not defined 我也没有找到要导入的模块
  • 开个玩笑吗?你自己定义了auto_fill_form
猜你喜欢
  • 2014-06-11
  • 2014-12-13
  • 2013-12-06
  • 2014-02-14
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2021-11-14
  • 2018-02-27
相关资源
最近更新 更多