Я пытаюсь заполнить ModelForm существующими данными, если он существует, или создать новый экземпляр, если нет. Я прочитал django docs и несколько вопросов здесь о переполнении стека, но я не могу понять, почему моя форма не заполняется существующими данными. Я уверен, что мне не хватает чего-то простого, любая помощь будет оценена по достоинству.Форма 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: (обратите внимание на экземпляр = пакетное аргумент, это должно предварительно заполнить форму правильно?)
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>
Это сделало, спасибо! Я решил, что это будет просто. –