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

时间:2019-04-11 11:13:55

标签: python html css django

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

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

我尝试了几项更改和显示优先级的方法,但是没有任何效果。 我相信views.py中的某些内容将被修改以使其起作用,但是由于我的经验不足,我无法对此付诸表决。

Views.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')

form.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))

models.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

index.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

请帮助我将单选按钮链接到列表中的任务并相应显示。 预先感谢。

1 个答案:

答案 0 :(得分:1)

问题在您看来。在创建plotshape(crossover(fish1, fish2), style=shape.arrowup, location=location.belowbar, color=green, size=size.small, text="Buy") plotshape(crossunder(fish1, fish2), style=shape.arrowdown, location=location.belowbar, color=red, size=size.small, text="Sell") 对象时,您没有传递优先级。

Todo

上面的代码解决了您的问题。但我不建议这样做。您没有利用Django表单。请使用Django new_todo = Todo(text = request.POST['text'], task_priority = request.POST['priority']) 而不是forms.cleaned_data来获取参数,或使用ModelForm,它可以让您直接从表单实例保存。


模型更改建议

但是,这不是我想要解决的问题。您可以按照以下方式更改模型,以采用更有效的方式:

request.POST

您可能需要通过选择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,这将使您的工作更加轻松。