Django获取对象的实例并将其传递给窗体

Django获取对象的实例并将其传递给窗体,django,Django,我对Django和编程都是新手。我试图从数据库中生成一个记录列表,但有两个可编辑的字段。 在浏览器中,它应显示一行,其中包含以下字段: 客户端代码、客户端名称、原因、注释 名称和描述来自模型,是一个参考。用户应该只能捕获原因和注释 我已经创建了一个forms.py文件和一个ModelForm。我的问题是如何通过单个对象。对于本例,我将数据集限制为10条记录 在我的视图文件中 def home(request): if request.method == 'GET': nc

我对Django和编程都是新手。我试图从数据库中生成一个记录列表,但有两个可编辑的字段。 在浏览器中,它应显示一行,其中包含以下字段: 客户端代码、客户端名称、原因、注释 名称和描述来自模型,是一个参考。用户应该只能捕获原因和注释

我已经创建了一个forms.py文件和一个ModelForm。我的问题是如何通过单个对象。对于本例,我将数据集限制为10条记录 在我的视图文件中

def home(request):
    if request.method == 'GET':
        nca = NcaRe.objects.all()[:10]
        form = NcaReForm(instance= <what should go in here> )
        return render(request, 'NCAComments/home.html', {'form': form, 'nca': nca})
    else:
        pass
Forms.py

from django.forms import ModelForm
from .models import NcaRe

class NcaReForm(ModelForm):
    class Meta:
        model = NcaRe
        fields = ['reason', 'comment']
在html中,我试图循环并传递表单

{% for n in nca %}
<p> {{n.clientcode}}</p>
<form>
    {% csrf_token %}
    {{ form }}
</form>
{% endfor %}

一般来说,如果请求的方法与表单类似,则只需返回空表单。我写了下面的示例代码,您可以在表单验证表单后进行计算。是否有效

views.py

from django.shortcuts import render
from testPhilip.forms import NcaReForm
from testPhilip.models import NcaRe


def home(request):
    if request.method == 'GET':
        nca = NcaRe.objects.all()[:10]
        form = NcaReForm()

    elif request.method == 'POST':
        form = NcaReForm(request.POST)
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:

    return render(request, 'testPhilip/home.html', {'form': form, 'nca': nca})
您可以在表单验证后以如下格式检索数据: comment=表单。已清理的_数据['comment']

更新:

如果要使用数据库中的值或任何默认值填充表单字段,可以在“获取”部分传递它们,如下所示:

nca_object=NcaRe.objects.get(pk=nca_id)
form=NcaReForm({
    'comment':nca_object.comment,
    'reason':nca_object.reason,
})

有关编写表单的更多信息,请参阅

是否可以编辑您的问题以将forms.py和models.py包含在其中?编辑以包含表单、模型以及我试图通过HTMLTanks实现的目标。在这种情况下,我正在寻找更多的更新/出售选项。原因和评论可能已经被填充,所以我希望它们被返回并更新。这就是我希望在循环中返回实例的原因。它来自现有的数据库表,因此我在许多实例中都有初始值。@PhilipSeimenis我更新了答案以满足您的请求。如果我将主键作为一个实例传递,我就可以实现这一点。当我尝试上面的代码时,我得到了错误。问题是我在同一页上有多个表单,就像列表一样
nca_object=NcaRe.objects.get(pk=nca_id)
form=NcaReForm({
    'comment':nca_object.comment,
    'reason':nca_object.reason,
})