Django:链接来自2个查询集的数据



我是django的新手,目前正在制作一个管理面板,在那里我可以查看用户订单。我有两个型号字段

订单项型号

class OrderItem(models.Model):
customer_id = models.ForeignKey(
User, on_delete=models.SET_NULL, blank=True, null=True)
product = models.ForeignKey(
Product, on_delete=models.SET_NULL, blank=True, null=True)
order_id = models.ForeignKey(
Order, on_delete=models.SET_NULL, blank=True, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)

用户模型

class Users(AbstractBaseUser):
name = models.CharField(max_length=200)
email = models.CharField(max_length=200)
password = models.CharField(max_length=255)

views.py

def admin_panel(request):
orders=OrderItem.objects.all().order_by('-customer_id')
context={
'orders':orders,
}
return render(request, 'index.html', context)

index.html

{% for order in orders %}
<tr>
<td>{{order.order_id}}</td>
<td>{{order.customer_id}}</td>
<td>{{order.date_added}}</td>
<td>{{order.product_id}}</td>
<td>{{order.quantity}}</td>
<td><span class="label label-success">COMPLETED</span></td>
</tr>
{% endfor %}

在我的views.py中,我如何根据用户模型获得客户的实际名称,而不是每个客户id?

因此,首先,您需要收集视图中的相关数据。您可以提高查询的效率,以便它在收集订单的同时收集关联的用户;

orders=OrderItem.objects.select_related('customer_id').all().order_by('-customer_id')

然后在您的模板中,您将执行{{ order.customer_id.name }}

值得注意的是,您通常不会在FK关系的字段上添加_id后缀,因为django将在数据库级别的内部执行此操作。因此,您的数据库字段可能是customer_id_id。因为在django中,可以遍历这种关系,所以通常只将其称为customer,因为您可以执行类似customer.name的操作。

你可以在这里阅读更多关于这方面的内容;https://www.django-antipatterns.com/antipatterns/foreign_key_with_id_suffix.html

最新更新