我在使用 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})
成功的結果

PS:有 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})
過濾器的結果:<QuerySet [<Pedido: Pedido: 1>, <Pedido: Pedido: 2>]>
uj5u.com熱心網友回復:
您可以檢索客戶(cliente)的產品(produtos),甚至是屬于客戶(cliente)的產品(produtos)的優惠券(cupoms),而不是檢索訂單(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 從相關視圖傳遞給您的模板。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343259.html
標籤:Python 姜戈 PostgreSQL
