簡體   English   中英

Django form.save()

[英]Django form.save()

我在Django中遇到CRUD的問題,無法將對象添加到數據庫中

views.py

@login_required
def persons_add(request):
    form = forms.PersonForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('persons_list')
    context = {
        'form': form
    }
    return render(request, 'persons/persons_add.html', context)

form.html

<form role="form" method="POST" action="/persons/">
    {% csrf_token %} 
    <table class="table table-bordered">
        {% for field in form.visible_fields %} 
        <tr>
            <th>
                {{ field.label }}
            </th>
            <td>
                {{ field }}
            </td>
        </tr>
        {% endfor %}
    </table>
    <button type="submit" name="submit" class="btn btn-success">Add Person</button>
</form>

表格

from django import forms

from persons import models

class PersonForm (forms.ModelForm):
    class Meta:
        model = models.Person
        fields = ['name', 'surname']

person_list.html

<tbody>
                        {% for person in persons_list %}
                        <tr> 
                            <td>{{ person.name }}</td>
                            <td>{{ person.surname }}</td>
                            <td>
                                <a href="{{ person.id }}/edit" 
                                   <p data-placement="top" data-toggle="tooltip" title="Edit"><button class="btn btn-primary btn-xs" data-title="Edit" data-toggle="modal" data-target="#edit" ><span class="glyphicon glyphicon-pencil"></span></button></p>
                                </a>
                            </td>
                            <td>
                                <a href="{{ person.id }}/delete">
                                    <p data-placement="top" data-toggle="tooltip" title="Delete"><button class="btn btn-danger btn-xs" data-title="Delete" data-toggle="modal" data-target="#delete" ><span class="glyphicon glyphicon-trash"></span></button></p>
                                </a>
                            </td>
                        </tr>
                        {% endfor %}
                    </tbody>

urls.py(應用程序)

from django.conf.urls import patterns, include, url
from django.contrib import admin

from persons import views

urlpatterns = patterns('',
    #url(r'^$', views.PersonsView.as_view(), name='persons'),
    url(r'^$', views.persons_list, name='persons_list'),
    url(r'^add/', views.persons_add, name="persons_add"),
    url(r'^(?P<person_id>\d+)/edit/$', views.persons_edit, name="persons_edit"),
    url(r'^(?P<person_id>\d+)/delete/$', views.persons_delete, name="persons_delete"),
)

urls.py(主項目)

from django.conf.urls import patterns, include, url
from django.contrib import admin
from hr import views

urlpatterns = patterns('',
    url(r'^persons/', include('persons.urls', namespace='persons')),
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', views.index, name='index'),  
    url(r'^logout/$', 'django.contrib.auth.views.logout', {'template_name': 'login.html'}),
    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
)

有人看到錯誤了嗎? 為什么這里沒有工作? 為什么我無法將POST發送到日期數據庫並添加Person?

首先,您的views存在錯誤,您需要在GET請求中發送空表單,並在POST時處理該表單:

@login_required
def persons_add(request):
    # check if it's POST request then handle the form
    if request.method == 'POST':
        form = forms.PersonForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('persons_list')
    else:
        # if not, you need an empty form for GET request
        form = forms.PersonForm()
    context = {
        'form': form
    }
    return render(request, 'persons/persons_add.html', context)

請先更正此問題,然后我們將再次檢查您一次,一次一次。

檢查您的網址路由,您當前正在發布到/persons/ ,根據您的網址建議更改為/persons/add/

另外,您的主urls.py存在錯誤,如果要包含應用程序urls.py ,請不要與主路由混合使用,請按以下方式拆分它們:

主要urls.py:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', views.index, name='index'),  
    url(r'^logout/$', 'django.contrib.auth.views.logout', {'template_name': 'login.html'}),
    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
)

# split your app urls and using += patterns with their views
urlpatterns += patterns(
    'persons.views',
    (r'^persons/', include('persons.urls', namespace='persons')),
)

暫無
暫無

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

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