gpt4 book ai didi

python - 当设置instance=object时,Django模型表单不会填充

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:19 25 4
gpt4 key购买 nike

我正在尝试使用现有数据填充 ModelForm(如果存在)或创建一个新实例(如果不存在)。我读过django docs以及 Stack Overflow 上的几个问题,但我不明白为什么我的表单没有填充现有数据。我确信我错过了一些简单的东西,任何帮助将不胜感激。

在 forms.py 中:

from django.forms import ModelForm, Textarea
from .models import Batch

class BatchForm(ModelForm):
class Meta:
model = Batch
fields = ('recipe', 'date', 'original_gravity', 'final_gravity', 'gravity_units', 'notes')
widgets = {'notes': Textarea(attrs={'cols': 40, 'rows': 10})}

在views.py中:(注意instance=batch参数,这应该预先填充表单,正确吗?)

def batch_entry(request, batch_id):
if int(batch_id) > 0:
batch = get_object_or_404(Batch, id=batch_id)
form = BatchForm(request.POST, instance=batch)
context = {'BatchForm': form, 'batch': batch }
else:
form = BatchForm()
context = {'BatchForm': form, 'batch': None }
return render(request, 'logger/batch_entry.html', context)

batch_entry.html 模板:

{% if batch.id > 0 %}
<h1>{{batch.date}}</h1>
<h3>{{batch.recipe}}</h3>
<form action="{% url 'logger:batch_entry' batch.id %}" method="post">
{% csrf_token %}
<table>
{{BatchForm.as_table}}
</table>
<input type="submit" value="Submit">
</form>
{% else %}
<h1>New Batch</h1>
<form action="{% url 'logger:batch_entry' 0 %}" method="post">
{% csrf_token %}
<table>
{{BatchForm.as_table}}
</table>
<input type="submit" value="Submit">
</form>
{% endif %}
<form action="{% url 'logger:index' %}" method="post">
{% csrf_token %}
<input type="submit" value="Return to Index">
</form>

最佳答案

因为您传递request.POST。它应该包含提交的数据,这自然会覆盖实例中已有的值;但由于您是在 GET 上执行此操作,因此 POST 数据为空,因此您的表单显示为空。

仅当请求实际上是 POST 时,才将 request.POST 传递到表单中。

关于python - 当设置instance=object时,Django模型表单不会填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com