Django listview仅在接收到真实值时才列出

2024-09-29 21:45:08 发布

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

我正在开发一个生成请求的应用程序(在市政厅的上下文中,而不是web请求)。我用的是django1.11。你知道吗

在我的购物区中,我有一个视图,使用get_context_data获取请求的对象并列出它们。我的问题是,有几个部门和请求将只列在下一个部门,如果前一个批准。你知道吗

在我的models.py中,我有与我的请求相关的类请求(Solicitacao)和类SecretaryApproval (SecretarioAprovacao)。你知道吗

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

型号.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"

视图.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

Tags: namepy视图truedatagetmodelscontext
2条回答

你没有展示你的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

如果我正确理解你的问题,这应该可以做到:

approved_request_ids = SecretarioAprovacao.objects.filter(secretario_aprovacao=True).values_list('id', flat=True)
context['solicitacoes'] = Solicitacao.objects.filter(id__in=approved_request_ids)

相关问题 更多 >

    热门问题