【问题标题】:Django: Link data from 2 QuerysetsDjango:链接来自 2 个查询集的数据
【发布时间】:2021-01-04 11:23:10
【问题描述】:

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

OrderItem 模型

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?

【问题讨论】:

  • 这给了你什么? {{order.customer_id.name}}
  • @Kurosh Ghanizadeh 它给出了空字符串

标签: python django django-queryset


【解决方案1】:

首先,您要在视图中收集相关数据。您可以让您的查询更高效一点,以便在收集订单的同时收集关联用户;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2018-04-12
    • 2014-10-03
    • 2020-04-27
    • 2018-08-02
    相关资源
    最近更新 更多