【问题标题】:Django can't save new instance to modelDjango 无法将新实例保存到模型中
【发布时间】:2019-01-29 17:53:53
【问题描述】:

我无法将表单中的数据保存到数据库。表格显示正确,似乎可以提交。每当我被重定向到“project_list.html”时,我都看不到新项目。

我还检查了管理站点是否将新实例保存到模型,但我的代码似乎有问题。

这是我的文件:

模型.py

class Project(models.Model):
    project_id = models.CharField(max_length=30)
    project_name = models.CharField(max_length=100)

view.py

def projects_list(request):
    projects = Project.objects.all()
    table = ProjectTable(Project.objects.all())
    RequestConfig(request, paginate={'per_page':25}).configure(table)
    return render(request, 'portal/project/list.html', {'projects': 
    projects, 'table': table})


 def project_add(request):
    if request.method == 'POST':
        form = ProjectAddForm(request.POST)
        if form.is_valid():
           form.save()
           return redirect('project_list',)
    else:
        form = ProjectAddForm()
    return render(request, 'portal/project/add.html', {'form': form})

forms.py

from django import forms
from .models import Project

class ProjectAddForm(forms.ModelForm):
    class Meta:
        model = Project
        fields = ['project_id', 'project_name',]

添加.html

{% extends 'portal/base.html' %}

{% block title %}Add Project{% endblock title %}

{% block content %}

<div class="col-sm-10 offset-sm-1 text-center">
    <form action="{% url 'portal:projects_list' %}" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit">
    </form>        
</div>

{% endblock content %}

projects_list.html

{% extends 'portal/base.html' %}
{% load render_table from django_tables2 %}


{% block content %}
    <h1>Projects List</h1>

    {% render_table table %}

{% endblock content %}

urls.py

from django.urls import path
from . import views

app_name = 'portal'

urlpatterns = [
   path('', views.homepage, name='homepage'),
   path('password_generator/', views.password_generator, 
         name='password_generator'), 
   path('projects_list/', views.projects_list, name='projects_list'),
   path('project/<str:project_id>/', views.project_detail, 
         name='project_detail'),
   path('add/', views.project_add, name='project_add'),
]

【问题讨论】:

  • 试试这个:project = form.save(commit=False) 然后project_name = form.cleaned_data['project_name'] 然后保存project.save()
  • @Ahtisham 我试过了,但没有解决问题。
  • project_list 在哪里?
  • @Ahtisham 我已在原始帖子中添加了 urls.py。你可以看看
  • ProjectTable 是什么?它在哪里定义?

标签: django django-models django-forms


【解决方案1】:

我在我的代码中发现了问题。在我的 project_add 视图中,我试图重定向到“project_list”url,但它不存在。那是错误....

【讨论】:

  • 不,它的复数形式。
猜你喜欢
  • 2022-01-24
  • 2015-02-27
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多