最近,我的Django表单遇到了一个很奇怪的问题。我目前正在做待办事项清单项目。一切正常,除了每当我添加新任务时,其标题似乎都保存在数据库中,并带有附加的方括号和引号。它看起来像一个元素列表,但它是一个字符串。我通过显示数据库中字符串的沉默版本来解决该问题,但是例如在编辑任务时它仍然显示。希望任何人都知道可能会发生什么?
models.py:
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=35)
completed = models.BooleanField(default=False)
created_date = models.DateTimeField(auto_now_add=True)
# added_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
author = models.CharField(max_length=50,default='')
def __str__(self):
return self.title
forms.py:
from django import forms
from .models import *
class TaskForm(forms.ModelForm):
class Meta:
model = Task
fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'new_task_text','placeholder': 'Add new task'}),}
class TaskEditForm(forms.ModelForm):
class Meta:
model = Task
fields = ['title','completed']
widgets = {
'title': forms.TextInput(attrs={'class': 'new_task_text'}),}
views.py:
from django.shortcuts import render,redirect
from .forms import *
from django.contrib.auth.decorators import login_required
@login_required
def list_homepage(request):
tasks = Task.objects.filter(author=request.user.username)
for task in tasks:
if "['" and "']" in task.title:
task.title = task.title[2:-2] # CharField returns a string that is looking like one-element list. Have no idea why yet.
# try using form instead of modelform.
form = TaskForm()
if request.method == 'POST':
form = TaskForm({**request.POST,**{'author': request.user.username}})
if form.is_valid():
form.save()
else:
print(form.errors)
return redirect('/list/home')
context = {
'page_title': 'Todo list','tasks': tasks,'form': form,}
return render(request,'tasks/list.html',context)
@login_required
def update_task(request,pk):
task = Task.objects.get(id=pk)
form = TaskEditForm(instance=task)
if request.method == 'POST':
form = TaskEditForm(request.POST,instance=task)
if form.is_valid():
form.save()
return redirect('../..')
context = {
'form': form,'page_title': 'Update task','tasks/update_task.html',context)
@login_required
def delete_task(request,pk):
task = Task.objects.get(id=pk)
if request.method == 'POST':
task.delete()
return redirect('/list')
context = {
'page_title': 'Delete task','task': task,}
return render(request,'tasks/delete_task.html',context)
list.html:
{% extends 'tasks/base.html' %}
{% block content %}
<div class="new-task-column">
<form method="POST",action="#"> {% csrf_token %}
{{ form.title }}
<input class="submit" type="submit",value="Create task">
</form>
</div>
<div class="task-column">
{% for task in tasks %}
<div class="item-row">
<div class="task">
{% if task.completed == True %}
<s>{{ task }} </s>
{% else %}
{{ task }}
{% endif %}
</div>
<div class="del_upd_container">
<div class="single-upd-container"><a class="edit_button" href="/list/update_task/{{ task.id }}">Update</a></div>
<div class="single-del-container"><a class="edit_button" href="/list/delete_task/{{ task.id }}">Delete</a></div>
</div>
</div>
{% endfor %}
</div>
{% endblock content %}
update_task.html:
{% extends 'tasks/base.html' %}
{% block content %}
<div class="new-task-column">
<form method="POST"> {% csrf_token %}
<span class="update-task-layout">
{{ form }}
<input class="submit" type="submit" name="Update item">
</span>
</form>
</div>
{% endblock content %}
非常感谢您的帮助,我非常感谢!