【发布时间】:2022-01-18 03:25:04
【问题描述】:
我正在制作一个简单的 todolist 应用程序,但是当我尝试创建用户特定页面时,我无法添加新任务,可能是因为数据库没有获取所有必需的数据(即任务的所有者)。
models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class value(models.Model):
task=models.CharField(max_length=200)
complete=models.BooleanField(default=False)
created=models.DateTimeField(auto_now_add=True)
owner=models.ForeignKey(User,on_delete=models.PROTECT)
def __str__(self):
return self.task
views.py
from http.client import HTTPResponse
from urllib import response
from django.shortcuts import render,redirect
from todo.models import value
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
# Create your views here.
from .forms import TitleForm
from django.urls import reverse
from django.contrib.auth.models import User
def home(request):
values=value.objects.all()
form=TitleForm()
if request.method=='POST':
form=TitleForm(request.POST)
if form.is_valid():
new_data=form.save(commit=False)
new_data.owner=request.user()
new_data.save()
return HttpResponseRedirect('/')
context={'form':form,'values':values}
return render(request,'home.html',context)
#update
def update(request,id):
ggwp=value.objects.get(id=id)
form=TitleForm(instance=ggwp)
if request.method == 'POST':
form=TitleForm(request.POST,instance=ggwp)
if form.is_valid:
form.save()
return redirect('home')
context={'form':form,}
return render(request,'update.html',context)
#delete
def delete_data(request, id ):
if request.method=="POST":
ggwp=value.objects.get(id=id)
ggwp.delete()
return HttpResponseRedirect(reverse('deldata', kwargs={'id':id}))
return redirect("/")
forms.py
from django import forms
from django.forms import ModelForm
from .models import value
from django import forms
class TitleForm(forms.ModelForm):
class Meta:
model= value
fields='__all__'
urls.py(app)
from django.conf.urls import url
from django.urls import path
from . import views
urlpatterns=[
path('',views.home,name='home'),
path('delete/<str:id>', views.delete_data,name='deldata'),
path('update/<str:id>',views.update,name='update')
]
home.html(主页)
<form method="POST">
{% if user.is_authenticated %}
Hello,{{user.username}}<br>
<a href="accounts/logout">Logout</a>
{% else%}
<a href="accounts/register">Register</a>
<a href="accounts/login1">login</a>
{% endif %}
</form>
<div class="p-3 mb-2 bg-warning text-dark" style="text-align: center;">
<form action="/" method="post" >
{% csrf_token %}
{{form.task}}
<input class='btn btm-sm btn-info' type='submit' name='add' value="add" >
</form>
{% for val in values %}
{% if val.complete == True %}
<s>{{val}}</s>
{% else %}
<span>{{val}}</span>
{% endif %}
<form action="{% url 'deldata' val.id %}" method="POST" class="in-line">
{% csrf_token %}
<input class='btn btm-sm btn-danger' type="submit" name="delete" value="delete">
<a class='btn btm-sm btn-info' href="{% url 'update' val.id %}" >Update</a>
</form>
{% endfor %}
</div>
Home.html 看起来像这样: todo
当我想添加一个任务并单击添加时,什么都没有发生。它只会重定向回同一页面,但不会将数据插入数据库。 如果问题有问题,真的很抱歉!
【问题讨论】:
-
尝试使用 new_data.owner=request.user 而不是 new_data.owner=request.user()
-
尝试 new_data.owner=request.user 也没有用。
-
为什么要使用表单进行注销、注册?试试下面的home.html ill post...还有为什么你只渲染表单的任务字段?
标签: python django django-views