【问题标题】:Queryset filter() in Django with ForeignKey使用 ForeignKey 在 Django 中查询集过滤器()
【发布时间】:2021-10-29 20:29:08
【问题描述】:

我在使用 Django 查询集时遇到问题。首先,我要做的是从客户那里收到他/她使用的折扣券(简称dc),然后与系统中已有的折扣券进行比较。我确实设法用 1 做到了

我的看法:

    @login_required(login_url='login')
    def cupons(request):
       produtos = Produto.objects.all()
       cliente = Cliente.objects.get(user=request.user)
       pedido = Pedido.objects.all().get(cliente=cliente)
    return render(request, 'cupons.html', {'lista': produtos, 'venda': pedido.produto.cupom})

成功的结果

P.S: 有 2 个 Usado (Used) 因为他们有相同的“dc”

当用户使用 2 个或更多“dc”时问题开始,它表示 get() 收到了超过 1 个结果,经过一些研究我发现我需要使用过滤器,但有人可以解释我如何实现使用过滤器的结果相同?

我的课程是 Cliente(客户)、Produto(产品)和 Pedido(订单)。

我的模型:

class Cliente(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ...

class Produto(models.Model):
    STATUS = (
        ('Novo', 'Novo'),
        ('Expirado', 'Expirado'),
        ('Usado', 'Usado'),
    )

    ...
    ...
    cupom = models.CharField(max_length=200, null=True)
    ...

class Pedido(models.Model):  
    cliente = models.ForeignKey(Cliente, null=True, on_delete=models.SET_NULL)
    produto = models.ForeignKey(Produto, null=True, on_delete=models.SET_NULL)
    ...

只是确定我的 html:

                      {% for i in lista %}
                        <tr>
                            <td ><img src="{{i.lojista.imagem}}" class="logo_lojista"> </td>
                            <td> {{i.nome}}</td>
                            <td><a class="btn btn-outline-danger  btn-sm btn-block td_cupom" href="{% url 'liberar_form' i.id %}" >Liberar Cupom</a></td>
                            {%if venda != i.cupom %}
                            <td class="td_status"> {{i.status}}</td>
                            {%else%}
                            <td class="td_status">Usado</td>
                            {%endif%}
                            <td class="td_desconto"> {{i.desconto}}</td>
                            <td class="td_estoque"> {{i.estoque}}</td>
                        </tr>
                    {% endfor %}

使用下面的代码,我得到了一个带有我的订单号列表的查询集的结果,现在我想从产品 (FK) 中提取 cupom(优惠券)字段。有人可以帮我吗?

  @login_required(login_url='login')
def cupons(request):
    produtos = Produto.objects.all()
    cliente = Cliente.objects.get(user=request.user)
    pedido = Pedido.objects.all().filter(cliente=cliente)


    return render(request, 'cupons.html', {'lista': produtos, 'venda': pedido})

过滤器的结果:, ]>

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

    您可以检索客户 (cliente) 的产品 (produtos),甚至是属于客户 (cliente) 的产品 (produtos) 的优惠券 (cupom),而不是检索订单 (pedido) 记录。为此,您可以使用 values_list,如下所示:

    cupoms_usado = Pedido.objects.filter(cliente=cliente).values_list("produto__cupom", flat=True)
    

    它将连接两个表(Pedido 和 Produto),并为您提供客户使用的优惠券列表。然后您可以简单地检查列表的优惠券是否在已使用的优惠券列表中。

    {% if i.cupom in cupoms_usado %}
    

    注意:不要忘记从相关视图将 cupoms_usado 传递给您的模板。

    【讨论】:

    • 太棒了,伙计!非常感谢 !也谢谢你的课,我不知道我可以使用这个函数来连接表格。
    猜你喜欢
    • 2019-07-29
    • 1970-01-01
    • 2021-08-10
    • 2018-12-30
    • 1970-01-01
    • 2014-06-12
    • 2015-09-14
    • 2012-03-12
    • 2020-08-22
    相关资源
    最近更新 更多