在Django模型表单中过滤,用户输入过滤器值

时间:2017-03-18 16:30:26

标签: django django-models django-forms django-queryset

我对django很新,虽然我的热情仍然坚持下面:

我有模特

class Task(models.Model):
    Taskdetails = models.CharField(max_length=500, null=True)
    asset = models.ForeignKey('Asset', null=True)

    def __str__(self):
        return str(self.id)

我用ModelForm技术创建了几个对象

我想创建一个用户可以选择资产的模板,然后按按钮显示与此资产相关的所有任务。我提到资产有很多任务。我正在尝试使用Django ModelForm。

所以,我首先创建了表单

class HistoryForm(ModelForm):

    class Meta:
        model = Task
        fields =('asset',)

然后我创建了视图"历史"用户可以选择感兴趣的资产:

def history(request):
    if request.method == "POST":
        hist_form = HistoryForm(request.POST)
        if hist_form.is_valid():
           hist = hist_form.save(commit=False)
           hist.save()
           return ('results')
    else:
       hist_form = HistoryForm()

    return render(request, 'TaskTrace/history.html', {'hist_form': hist_form}

html标签(部分内容)如下所示

{{ hist_form }}
<p><a href="{% url 'results'  %}"> <button type="submit" > Results</button></a></p>

然后我想做出用户做出的选择并将其转移到下一个视图(&#39;结果&#39;)

def results(request):
    tasks = Task.objects.filter(asset=request.POST.get('asset', None))
    return render(request, 'Tasktrace/results.html', {'tasks': tasks})

hmtl模板是

{% for task in tasks %}
    <div>
        <p><a href=""><u>{{ task }}  </a></p>
    </div>
{% endfor %}

问题在于我没有完成任何任务。我相信我的大问题是将值从第一个视图转移到另一个视图。

在ModelForms中进行过滤是否正确?我可能会错过这里的东西

我真的很感谢你的帮助

1 个答案:

答案 0 :(得分:0)

你非常亲密。

history.html内写下这样的表格:

<form method="POST" action="{% url 'results' %}">{% csrf_token %}
    {{ hist_form }}
    <input type="submit" name="submit_results" value="Results" />
</form>

现在,上面的表单将提交到results视图,您将获得任何POST数据(正如您所做的那样,request.POST.get('asset', None))。