订购数据,django 上的分页器

Ordering data, Paginator on django

我正在制作的程序是显示有关数据库中产品的信息。 该程序运行良好,问题是我想按姓氏而不是“所有者”订购。例如。如果客户用户名是 ewOI,这是“所有者”,他的名字是 Robert,姓氏是 Bosh,我想按姓氏而不是所有者来排序查询集。

查看代码如下:

class ExpView(ListView):
    context_object_name = 'product'
    queryset = Product.objects.filter(prod__isnull=True).order_by('owner')
    template_name = 'productrecords.html'
    paginate_by = 10

有两种模型,一种是产品中的,一种是用户中的 产品型号:

class Product(models.Model):
owner = models.ForeignKey(
      User, on_delete=models.PROTECT, related_name='products'
   )
   id_subscription = models.CharField(max_length=30, unique=True)
   amount = models.DecimalField(max_digits=11, decimal_places=2, null=True)
   interest_rate = models.DecimalField(max_digits=4, decimal_places=2)
   start_date = models.DateField(null=True)

用户模型:

class Profile(models.Model):
   user = models.OneToOneField(User, on_delete=models.PROTECT, primary_key=True)
   second_name = models.CharField(max_length=32, blank=True)
   last_name2 = models.CharField(max_length=32, blank=True)
   recovery_email = models.EmailField(unique=True, null=True)
   phone_number = models.CharField(max_length=16, unique=True, null=True)

例如,如果我去终端并尝试从数据库中获取查询:

但我想 order_by('last_name') 但那行不通。如何订购?

非常感谢

您也可以在指定order_by参数时参考相关模型。像这样:

queryset = Product.objects.filter(prod__isnull=True).order_by('owner__profile__last_name2')

应该可以。 (虽然,我想知道如果用户模型有 last_name 字段,在配置文件中使用 last_name2 的原因是什么。)

你试过了吗?

queryset = Product.objects.filter(prod__isnull=True).order_by('owner__last_name2')

您可以通过键入 __ 从外键调用字段。