django - django模型表单不保存数据
问题描述
我想用 django 创建一个 todolist 应用程序。我为列表模型创建了一个表单,但是当用户单击提交提交列表时,表单没有保存,为什么?
这是views.py 我已经创建了表单的一个实例并将用户字段设置为它然后保存该实例但实际上它没有
def index(request):
if request.user.is_authenticated:
user_ = User.objects.get(username=request.user.username)
lists = user_.user.all()
form = listForm()
if request.method == "POST":
form = listForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
return HttpResponseRedirect(reverse("index"))
context = {'lists':lists, 'form':form}
return render(request, 'todolists/index.html', context)
else:
return render(request, 'todolists/login.html')
这是索引模板
{% extends "todolists/layout.html" %}
{% block body %}
{% if user.is_authenticated %}
<div class="center-column">
<form method="POST" action="{% url 'index' %}">
{% csrf_token %}
{{form.title}}
<input type="submit" class="btn btn-info">
</form>
<div class="todo-list">
{% for list in lists %}
<div class="item-row">
<a class="btn btn-sm btn-info" href="{% url 'update' list.id %}">update</a>
<a class="btn btn-sm btn-danger" href="{% url 'update' list.id %}">delete</a>
<span>{{list}}</span>
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% endblock %}
这是 urls.py
from django.urls import path
from .import views
urlpatterns = [
path('', views.index, name='index'),
path('update/<str:id>/', views.update, name='update'),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
]
这是models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass
class list(models.Model):
title = models.CharField(max_length=200)
finished = models.BooleanField(default=False)
timestamps = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
def __str__(self):
return self.title
这是表单代码
class listForm(forms.ModelForm):
title= forms.CharField(label=mark_safe("<span style='color:white;'>Title:</span>"),
widget= forms.TextInput(attrs={'placeholder':'Add new task...', 'class':'form-control'}))
finished= forms.BooleanField(label=mark_safe("<span style='color:white;'>Finished:</span>"),
widget= forms.CheckboxInput(attrs={'style':'width:25px;'}))
class Meta:
model = list
fields = '__all__'
解决方案
尝试将您的模板文件更新{{ form.title }}
为{{ form }}
django 文档中提到的链接
title
如果只需要HTML 中的字段,请更新您的 forms.py 文件
class listForm(forms.ModelForm):
title= forms.CharField(label=mark_safe("<span style='color:white;'>Title:</span>"),
widget= forms.TextInput(attrs={'placeholder':'Add new task...', 'class':'form-control'}))
class Meta:
model = list
fields = ('title', )
推荐阅读
- javascript - 检测表情符号的正则表达式不适用于肤色表情符号
- mysql - 使用选择的 SQL 连接查询
- reactjs - 为什么即使包装类呈现输入框,我的 React 输入框也不呈现延迟响应 - React with Redux
- android - 未安装 Flutter 插件;这增加了 Flutter 特定的功能。#Android Studio 未在 /path/to/android/studio 找到
- azure - Peek 消息不会返回所有消息
- java - Spring JPA HQL 枚举“in 子句”查询
- javascript - 等待所有 dom 更新完成
- python-3.x - 使用openpyxl检查它是否是工作簿的第一张最简单的方法是什么
- reactjs - React antd 4 Form in Modal resetFields 显示错误数据
- php - 带有 laravel 的 Paypal PHP SDK。在生产模式下加载配置端点时出现问题