python - 如何预填充 Django ModelForm 字段

标签 python django python-3.x django-forms django-2.1

我有以下模型:

class IssueProcessForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(IssueProcessForm, self).__init__(*args, **kwargs)

        self.fields['number'].disabled = True
        self.fields['title'].disabled = True
        self.fields['body'].disabled = True

        self.fields['body'].widget = forms.Textarea(
            attrs={
                'cols': 50
            }
        )

    class Meta:
        model = Issue
        fields = (
            'number', 'title', 'body', 'price'
        )

我想用 View 中的数据预填充字段 numbertitlebody,呈现表单,然后确保显示与字段对应的值,同时禁用这些字段,这样用户就不会更改值。我希望 price 字段是用户触摸的唯一内容,当单击保存按钮时,我希望所有内容都保存到数据库中。我尝试了以下方法:

def issue_process(request, repo_name, issue_number):
    get_issue_number = request.session.get('issue_number_{}'.format(issue_number))
    get_issue_title = request.session.get('issue_number_{}_title'.format(issue_number))
    get_issue_body = request.session.get('issue_number_{}_body'.format(issue_number))

    if request.method == 'POST':
        form = IssueProcessForm(request.POST)
        if form.is_valid():
            issue = form.save(commit=False)
            issue.number = get_issue_number
            issue.title = get_issue_title
            issue.body = get_issue_body
            issue.save()
    else:
        form = IssueProcessForm(initial={
            'number': get_issue_number,
            'title': get_issue_title,
            'body': get_issue_body
        })
    return render(request, 'core/issue_process.html', {'form': form})

...但是当我尝试提交时,三个字段中的每一个都一直说此字段是必需的。请问我该怎么办?请注意,get_issue_numberget_issue_titleget_issue_body 是我要预填充字段 number 的值、titlebody 分别带有。

最佳答案

当您禁用表单域时,浏览器不会在您提交表单时提交该域的值。因此,您需要为 POST 请求和 GET 请求提供初始数据:

if request.method == 'POST':
    form = IssueProcessForm(
        request.POST,
        initial={
            'number': get_issue_number,
            'title': get_issue_title,
            'body': get_issue_body
        },
    )
    ...

关于python - 如何预填充 Django ModelForm 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53075940/

相关文章:

python - 如何在python中创建两个组元素之间的映射?

python xlrd : suppress warning messages

javascript - 防止用户通过多次点击提交按钮来发布多次提交

python - 在 Python 中调用类方法会引发 TypeError

python - 使用 PIL 在 Django 中调整图像大小两次

django - 有没有办法配置 Django Rest Framework 将 token 信息存储在 Redis 而不是数据库中?

python - 为什么 Python 数据类型在 Python 提示符中表现得像这样?

python - 使用 Python 在目录中监视文件,然后使用 POST 请求发送文件修改数据

python pandas 散点图错误 : is this a bug with pandas?

python - Pandas 将两列分组