簡體   English   中英

如何在 Django 中更改模型的狀態

[英]How to change status of the model in 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}))

'''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM