django - Django 获取对象的实例并将其传递给表单
问题描述
我是 Django 和一般编程的新手。我正在尝试从数据库生成记录列表,但有两个可以编辑的字段。在浏览器中,它应该显示一行包含以下字段:clientcode、clientname、Reason、comment Name 和 description 来自模型并且是参考。用户应该只能捕获原因和评论
我创建了一个 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
在我的模型中,我有一个名为 primarykey 的字段。我不确定如何将其传递给表格,以便我只带入该记录。我曾尝试查看文档,但无法遵循它。
我的模型 py。
from django.db import models
class NcaRe(models.Model):
primarykey = models.IntegerField(blank=True, null=False, primary_key=True)
clientcode = models.CharField(db_column='ClientCode', max_length=200, blank=True, null=True)
clientname = models.CharField(db_column='ClientName', max_length=510, blank=True, null=True)
reason = models.TextField(blank=True, null=True)
comment = models.TextField(blank=True, null=True)
class Meta:
db_table = 'NCA_RE'
表格.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 %}
解决方案
一般来说,如果请求的方法GET
像 as ,则只需要返回空表单form()
。我在下面写了示例代码,您可以在表单验证后进行计算form.is_valid()
视图.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 = form.cleaned_data['comment']
更新:
如果您想使用数据库中的值或任何默认值填充表单字段,您可以将它们传递到“GET”部分,如下所示:
nca_object=NcaRe.objects.get(pk=nca_id)
form=NcaReForm({
'comment':nca_object.comment,
'reason':nca_object.reason,
})
有关编写表单的更多信息,请参阅Django forms doc
推荐阅读
- vb.net - Didisoft PGP 解密和验证
- web-applications - 面临部署在 Netlify 上的 Blazor webapp 的问题
- python - 无法从提取的布尔值中打印数据帧
- arrays - 将 readline 输入作为数组获取
- swift - xcode bug 部署目标
- keras - ValueError:检查输入时出错:预期 embedding_1_input 具有形状(4,)但得到的数组形状(1,)与 numpy 相关
- elasticsearch - Elasticsearch,查找不匹配包含值的文档的文档
- url - 如何通过 url 传递特殊字符(例如 %)以在谷歌日历中创建新事件
- python-3.x - TypeError:add_worker() 得到了一个意外的关键字参数“版本”
- c# - 选中所有复选框以更新 datagridview 中的数据