2016-09-10 2 views
0

Я пытаюсь заполнить 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> 

ответ

1

Поскольку вы также прохождение request.POST. Предполагается, что они содержат данные , которые, естественно, переопределяют значения, уже указанные в экземпляре; но поскольку вы делаете это в GET, данные POST пусты, поэтому ваша форма отображается пустым.

Обратный запрос.POST в форму, когда запрос на самом деле является POST.

+0

Это сделало, спасибо! Я решил, что это будет просто. –