TODO 列表中的用户特定页面

User Specific Page in TODO List

我正在制作一个简单的 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(应用程序)

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

当我想添加一个任务并点击添加时,什么也没有发生。它只会重定向回同一页面,但不会将数据插入数据库。 如果问题有问题,真的很抱歉!

Home.html :

<div class = "divname">

  {% 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 %}

</div>

<div class="p-3 mb-2 bg-warning text-dark" style="text-align: center;">

<form method="POST" >
    {% csrf_token %} 
    {{form}}
     <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>
  • 更新 1:在表单中排除用户并在视图中添加当前用户

#不要将 Owner 添加到模型表单字段中

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=['task', 'complete', 'created']

Views.py:

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)