簡體   English   中英

設置 instance=object 時,Django 模型表單不會填充

[英]Django model form doesn't populate when instance=object is set

如果存在,我試圖用現有數據填充 ModelForm,否則創建一個新實例。 我在 Stack Overflow 上閱讀了django 文檔和幾個問題,但我不明白為什么我的表單沒有填充現有數據。 我確定我錯過了一些簡單的東西,任何幫助將不勝感激。

在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 傳遞到表單中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM