【问题标题】:User Specific Page in TODO List待办事项列表中的用户特定页面
【发布时间】: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


【解决方案1】:

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:在表单中排除用户并在视图中添加当前用户

#不要在模型表单字段中添加所有者

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)

【讨论】:

  • 使用表单工作,但用户将能够选择任务的所有者。但我不希望它被选中,相反,我希望所有者成为当前用户。
  • 除了我写的in-home函数还有其他方法可以保存任务和所有者吗?
  • 查看答案中的更新
猜你喜欢
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2019-06-02
相关资源
最近更新 更多