Django listview只有在收到真值时才会列出

时间:2018-04-12 12:49:16

标签: python django

我正在开发一个生成请求的应用程序(在市政厅的上下文中,而不是Web请求)。我正在使用Django 1.11。

在我的购物区,我有一个使用get_context_data的视图来获取我的请求的对象并列出它们。我的问题是有几个扇区,如果前一个扇区批准,请求将只列在下一个扇区。

在我的models.py我有一个请求(Solicitacao)的课程和与我的请求相关的课程秘书批准(SecretarioAprovacao)

我需要做的是,在显示数据之前,检查所有请求并仅列出分配给用户的请求,并在字段True中包含secretario_aprovacao

models.py

class SecretarioAprovacao(models.Model):
    secretario_relacionamento = models.ForeignKey(Solicitacao, on_delete=models.CASCADE)
    secretario_aprovacao_CHOICES = (
        (True, 'Sim'),
        (False, 'Não')
    )
    secretario_aprovacao = models.BooleanField("Aprovar Solicitação?",
        choices = secretario_aprovacao_CHOICES,
        default = True,
    )

    class Meta:
        verbose_name = "Secretario Aprovação"
        verbose_name_plural = "Secretario Aprovações"

view.py

class Compraslist(LoginRequiredMixin, ListView):
    model = Solicitacao
    template_name = 'compraslist.html'

    def get_context_data(self, **kwargs):
        context = super(Compraslist, self).get_context_data(**kwargs)
        context['solicitacoes'] = Solicitacao.objects.all()
        return context

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,应该这样做:

{{1}}

答案 1 :(得分:0)

您没有展示自己的Solicitacao型号,所以我无法给出完整的答案。我假设有一个类似solicitacao_user的字段,表示请求的所有者或创建者。

如果我理解你的问题,你可以尝试这样的事情。它显示属于当前登录用户的所有请求,并且至少还有一个True批准。

# views.py
class Compraslist(LoginRequiredMixin, ListView):
    # ... more code ...

    def get_context_data(self, **kwargs):
        ctx = super().get_context_data(**kwargs)

        approved_pk_set = set(
            e.pk for e in SecretarioAprovacao.objects.filter(secretario_aprovacao=True))
        ctx['solicitacoes'] = Solicitacao.objects.filter(pk__in=approved_pk_set, solicitacao_user=self.request.user)
        return ctx