python - 如何在 Django 中更改模型的状态
问题描述
我正在使用 Django 构建一个小型待办事项列表项目,待办事项列表的任务分为待办事项、进行中和已完成,我想将待办事项从待办事项列表移动到进行中列表改变它的状态,所以我给了to-do模型3状态,在views.py下面我指定了一个改变状态的方法,但它似乎不起作用,我不知道如何设置状态。任何帮助,将不胜感激。
models.py
'''
class Todo(models.Model):
status_option = (
('to_do', 'to_do'),
('in_progress', 'in_progress'),
('done', 'done'),
)
status = models.CharField(max_length=20, choices=status_option, default='to_do')
project = models.ForeignKey(Project, on_delete=models.CASCADE)
name = models.CharField(max_length=20)
create_date = models.DateTimeField(auto_now_add=True)
start_date = models.DateTimeField(default=datetime.datetime.now)
due_date = models.DateTimeField(default=datetime.datetime.now)
details = models.TextField()
def __str__(self):
return self.status
'''
views.py
'''
def add_to_progress(request, todo_id, project_id):
todo = Todo.objects.get(id=todo_id)
project = Project.objects.get(id=project_id)
if request.method != 'POST':
form = dragTodoForm()
else:
form = dragTodoForm(request.POST)
Todo.objects.filter(id=todo_id).update(status='in_progress')
context = {'form', form, 'todo', todo, 'project', project}
return render(request, 'todo_lists/new_progress.html', context)
def add_to_done(request, todo_id, project_id):
todo = Todo.objects.get(id=todo_id)
project = Project.objects.get(id=project_id)
if request.method != 'POST':
form = dragTodoForm()
else:
form = dragTodoForm(request.POST)
Todo.objects.filter(id=todo_id).update(status='done')
context = {'form', form, 'todo', todo, 'project', project}
return render(request, 'todo_lists/new_done.html', context)
'''
views.py
'''
def drag(request, project_id):
project = Project.objects.get(id=project_id)
todo = Todo.objects.filter(status='to_do')
progress = Todo.objects.filter(status='in_progress')
done = Todo.objects.filter(status='done')
context = {'todo', todo, 'progress', progress, 'done', done, 'project',
project}
return render(request, 'todo_lists/project.html', context)
'''
解决方案
I solved the problem using below strategy:
models.py
''' 类 Todo(models.Model):
status_option = (
('to_do', 'to_do'),
('in_progress', 'in_progress'),
('done', 'done'),
)
status = models.CharField(max_length=20, choices=status_option, default='to_do')
# todo_list's content
team = models.ForeignKey('Team', on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
name = models.CharField(max_length=20)
create_date = models.DateTimeField(auto_now_add=True)
start_date = models.DateTimeField(default=datetime.datetime.now)
due_date = models.DateTimeField(default=datetime.datetime.now)
project_code = models.CharField(max_length=20)
details = models.TextField()
def __str__(self):
return self.status
# return self.team['team'].queryset
def update_status(self):
if self.status == 'to_do':
self.status = 'in_progress'
elif self.status == 'in_progress':
self.status = 'done'
self.save()
'''
views.py
'''
def progress(request, pk):
to = get_object_or_404(Todo, pk=pk)
to.update_status()
return redirect(reverse('todo_lists:project', kwargs={'project_id':
to.project.pk}))
'''
推荐阅读
- php - 如何在express js中制作默认头像
- python - Flask/jinjas - url_for - 来自 pandas 的迭代数据 (itertuples)
- python-3.x - Sort pandas dataframe by date in day/month/year format
- url-rewriting - Mapping microservices on frontend
- python - How to save an Inline Formset inside another?
- ruby - Make errors while installing byebug gem
- json - What result from REST endpoint is more common?
- python - 重新创建已删除的 django_migrations 表
- angular - Placeholder for nz select in ngzorro isn't working
- reactjs - 无法找到包含文本的元素:为了您的共同兴趣