【问题标题】:Filtering Project Status筛选项目状态
【发布时间】:2011-05-13 23:22:12
【问题描述】:

我正在尝试创建一个“按状态排序”功能,该功能显示,例如 .. 所有状态为“报价”的项目。我在弄清楚我应该如何处理这件事时遇到了一些麻烦。

这是我的 models.py(简化版)

class Project(models.Model):
client = models.ForeignKey(Clients, related_name='projects')
created_by = models.ForeignKey(User, related_name='created_by')


#general information
API_id = models.IntegerField(max_length=10, verbose_name='aC ProjectID', null=True, blank=True)
proj_name = models.CharField(max_length=255, verbose_name='Project Name')
...
notes = models.TextField(verbose_name='Notes', null=True, blank=True)


class Status(models.Model):
 project = models.ForeignKey(Project, related_name='status')
 value = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name='Status')
 date_created= models.DateTimeField(auto_now=True) 

我在 views.py 中创建单独的视图没有问题,但必须有一种比创建多个视图更有效的方法。

这是我的观点,仅显示报价状态项目:

@login_required
def quote_projects(request):
project_list = Project.objects.filter(status__value__exact='Q')
return render_to_response('project/index.html',{'project_list': project_list, 'user':user}, context_instance=RequestContext(request))

任何帮助将不胜感激!

谢谢,

史蒂夫

【问题讨论】:

  • 不清楚你的问题到底是什么。您是否正在尝试创建一个将采用任何状态值并显示具有该值的处方的视图?如果是这样,您不确定哪一点?

标签: django django-models filtering django-views


【解决方案1】:

这看起来不像排序;这看起来像是过滤问题。

如果是这样,您必须确定您的过滤键是否旨在成为可收藏的项目,或者它们是否是动态的并且您打算从某个基础开始。决定您是否要使用 URL 作为排序键或 CGI 参数。

无论哪种方式,处理程序都是相似的。首先,您将在 urls.py 中创建:

url('/projects/(?P<status>\d+)/', quote_projects),

您的项目可能如下所示:

@login_required
def quote_projects(request, status):
    status = dict(STATUS_CHOICES).get(status, None)
    if not status:
        raise Http404

    return render_to_response(
        'project/index.html',
        {'projects': Projects.objects.filter(status__value__exact = status)},
        context_instance=RequestContext(request))

您根本不需要“用户”;这是由 RequestContext 自动为您提供的,并通过您指定此方法 login_required 的事实得到保证。现在可以参考“http://example.com/projects/quoted”

对于 CGI 参数,您的 urls.py 行如下所示:

url('/projects/', quote_projects),

你的函数看起来像这样:

@login_required
def quote_projects(request):
    status = request.GET.get('status', None)
    status = dict(STATUS_CHOICES).get(status, None)
    if not status:
        raise Http404

    return render_to_response(
        'project/index.html',
        {'projects': Projects.objects.filter(status__value__exact = status)},
        context_instance=RequestContext(request))

现在您的网址将是:http://example.com/project/?status=quoted

【讨论】:

  • 嘿精灵,我在渲染时得到一个“Caught NoReverseMatch”:“视图状态”的反向参数“()”和关键字参数“{}”未找到。尝试加载模板时。有什么建议吗?
  • 这看起来是一个不同的问题。 (我还注意到,我在 urls.py 中给该函数提供了错误的名称;它始终命名为“quote_projects”,而不是我在原始文件中的“projects”)。您的错误消息是说您的功能“查看状态”需要某种状态才能正确运行。
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多