问题是所有字段都会重复,我只想为所有产品实现一个字段。我试过使用.distinct(),它不起作用。你可以看到照片;
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
items = models.ManyToManyField(OrderItem)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
billing_address = models.ForeignKey('BillingAddress', on_delete=models.SET_NULL, blank=True, null=True)
payment = models.ForeignKey('Payment', on_delete=models.SET_NULL, blank=True, null=True, related_name='payment_opt')
def __str__(self):
return self.user.username
def orders(request):
order = Order.objects.filter(user=request.user.id, ordered=True).distinct()
context = {
'order': order,
}
return render(request, 'orders.html', context)
{% for order in order %}
<p class="text-muted my-2" style="font-size:14px">
Address: {{ order.billing_address.street_address|capfirst }}</p>
<p class="text-muted my-2" style="font-size:14px">
Apartment Address: {{ order.billing_address.apartment_address|capfirst }}</p>
<p class="text-muted my-2" style="font-size:14px"> City: {{ order.billing_address.city|capfirst }}
</p>
<p class="text-muted my-2" style="font-size:14px"> State: {{ order.billing_address.state|capfirst }}
</p>
<p class="text-muted" style="font-size:14px">
Country: {{ order.billing_address.country.name|capfirst }}</p>
{% endfor %}
正如Willem正确指出的,在查询单个模型时,通常不可能有真正的重复。因此distinct()不会更改查询中的任何内容,因为所有对象都是不同的(由于pk)
问题是你认为什么是复制品。您可以在
values
上使用distinct
。例如,如果您只希望每个用户和帐单地址有一个不同的行,您可以这样做结果将是一个包含
dicts
的查询集,其中有两个键:“billing\u address”和“user”,dict的值是BillingAddress
和User
对象的pk
。你知道吗因为您可能需要模板中的实际值而不是pks,所以将上面的查询与loopups结合起来
正如在docs中提到的,对此有一些警告。这里还提到,在PostgreSQL上,只有您可以将字段作为参数直接添加到
distinct()
,但我既没有尝试过,也没有提到您的数据库相关问题 更多 >
编程相关推荐