链接来自djang模型的2个字段

2024-04-25 23:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Django比较陌生,我做了一个Todo列表,用户可以在其中添加任务并标记任务是否完成。我添加了一个优先级表单字段,它是一个radio select小部件。根据优先级,任务字段将有红色、橙色或绿色。你知道吗

单选按钮显示正确,我不能在没有输入优先级的情况下发布任务。但优先级始终被视为默认值(高)。你知道吗

我尝试了几件事情来改变和显示优先级,但都没有成功。 我相信世界上的某些东西视图.py但由于我缺乏经验,我一根手指也插不上。你知道吗

你知道吗视图.py你知道吗

@require_POST
def addTodo(request):
    form = TodoForm(request.POST)

    #print(request.POST['text'])

    if form.is_valid():
        new_todo = Todo(text = request.POST['text'])
        new_todo.save()

    for item in form:


    return redirect('index')

def completeTodo(request, todo_id):
    todo = Todo.objects.get(pk=todo_id)
    todo.complete = True
    todo.save()

    return redirect('index')

你知道吗表格.py你知道吗

    from django import forms

prior_choice =[('high','High'),('mod','Mod'),('low','Low')]
class TodoForm(forms.Form):
    text = forms.CharField(max_length = 40,
        widget = forms.TextInput(
            attrs= {'class': 'form-control', 'placeholder': 'Enter todo e.g. Delete junk files', 'aria-label': 'Todo', 'aria-describedby':'add-btn'}))
    priority = forms.CharField(widget=forms.RadioSelect(choices=prior_choice))

你知道吗型号.py你知道吗

from django.db import models

class Todo(models.Model):
    text = models.CharField(max_length=40)
    complete = models.BooleanField(default = False)
    task_priority = models.CharField(max_length=40, default='high')
    def __str__(self):
        return self.text

你知道吗索引.html你知道吗

<ul class="list-group t20"> {% for todo in todo_list %} {% if todo.task_priority == 'high'%} <a href=" {% url 'complete' todo.id %}" ><li class="list-group-item " style="background-color: red;"> {{ todo.text}}</li></a> {%elif todo.task_priority == 'mod'%} <a href=" {% url 'complete' todo.id %}" ><li class="list-group-item " style="background-color: orange;"> {{ todo.text}}</li></a> {%elif todo.task_priority == 'low'%} <a href=" {% url 'complete' todo.id %}" ><li class="list-group-item " style="background-color: yellow;"> {{ todo.text}}</li></a> {%else%} <div class="todo-completed"> <li class="list-group-item" style="background-color: green;"> {{ todo.text}}</li></div> {%endif%} {% endfor %} </ul>

Heres a screenshot of the output app

请帮助我将单选按钮链接到列表中的任务并相应显示。 提前谢谢。你知道吗


Tags: textpyidmodelsrequestgroupformsli
1条回答
网友
1楼 · 发布于 2024-04-25 23:40:40

问题在你看来。创建Todo对象时,没有传递优先级。你知道吗

       new_todo = Todo(text = request.POST['text'], task_priority = request.POST['priority'])

上面的代码解决了您的问题。但我不推荐。你没有利用Django表单。请使用Djangoforms.cleaned_data而不是request.POST来获取参数,或者使用ModelForm,它将允许您直接从表单实例保存。你知道吗


车型更改建议

但这不是我想解决的问题。您可以按以下方式更改您的模型,使其具有更灵活的方式:

from django.utils.translation import ugettext_lazy as _

class Todo(models.Model):
    PRIORITY_NONE = 0
    PRIORITY_LOW = 1
    PRIORITY_MODERATE = 2
    PRIORITY_HIGH = 3
    PRIORITIES = (
        (PRIORITY_NONE, _('')),
        (PRIORITY_LOW, _('Low')),
        (PRIORITY_MODERATE, _('Moderate')),
        (PRIORITY_HIGH, _('High')),
    )
    ...
    task_priority = models.PositiveSmallIntegerField(choices=PRIORITIES, default=PRIORITY_NONE)

您可能需要使用选项Todo.PRIORITIES更改窗体。另外,您可能希望使用ModelForm,这将使您的工作更轻松。你知道吗

相关问题 更多 >