Saving data from ModelForm

▼魔方 西西 提交于 2019-12-24 03:37:27

问题


I am new to Django and I'm trying to save data using ModelForm. Template 'Vlozit' has a ModelForm and when submitted, I want the data saved in the DB and the redirect to base.html that actually loads the data from the DB and lists the output. The problem is that all works fine but the data is not saved. Please help me find what I am missing. Thank you.

Here's the model:

class Customer(models.Model):
    Name = models.CharField(max_length=30)
    Description = models.CharField(max_length=150)
    Creation_Date = models.DateField(default=datetime.now)
    Active = models.BooleanField(default=False)

def __unicode__(self):
    return self.Name

Customers = models.Manager()

Here's the ModelForm:

class CustomerForm(forms.ModelForm):
    Description = forms.CharField(widget=forms.Textarea)

    class Meta:
        model = Customer

Here's the view:

def vlozit(request):
    if request.method == 'POST':
        form = CustomerForm(request.POST, instance=Customer)
        if form.is_valid():
            form.save(True) 
            return HttpResponseRedirect(reverse('Base.html'))
    else:
        form = CustomerForm()
        return render_to_response("Vlozit.html", {'form': form}, context_instance = RequestContext(request))

Here's the template 'Vlozit':

{% extends "base.html" %}

{% block head %}
    {{ form.media }}
    <script>
        $(function() {
            $( "#id_Creation_Date" ).datepicker();
        });
    </script>
{% endblock %}

{% block title %}{{block.super}} - Vlozit{% endblock %}
{% block content %}
<div id="content">
    <form method="POST" action="{% url url_home %}">
    {% csrf_token %}
        <table>
            <tr>
                <td>Name</td>
                <td>{{ form.Name }}</td>
            </tr>
            <tr>
                <td>Description</td>
                <td>{{ form.Description }}</td>
            </tr>
            <tr>
                <td>Creation Date</td>
                <td>{{ form.Creation_Date }}</td>
            </tr>
            <tr>
                <td>Active</td>
                <td>{{ form.Active }}</td>
            </tr>
        </table>
        <input type="submit" value="Vlozit">
    </form>
</div>
{% endblock content %}

回答1:


As Timmy says in the comments, you don't catch the case where the form is not valid. Not only do you not show errors in the template, but you also don't even redisplay the template if form.is_valid() is False. Move the last line of the view back one indentation level, and add {{ form.errors }} to the template.



来源:https://stackoverflow.com/questions/13046488/saving-data-from-modelform

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!