Django 1.10 order_by()FieldError

时间:2017-02-01 17:19:52

标签: python django

使用以下类,我希望能够为所有“Ship_Back”对象选择所有相关数据,并首先按“Ring”排序,然后按“Ppack”排序。

当我根据我认为文档所说的内容和我从以前版本的Django中读到的其他帖子尝试命令我的查询集时,我收到了一个FieldError。我尝试将其简化为只对“Ppack”相关表进行排序,但这也不起作用。

型号:

class Ring(models.Model):
    ring = models.IntegerField()

class Ppack(models.Model):
    ppack = models.IntegerField()
    ring = models.ForeignKey('Ring', on_delete=models.CASCADE)

class Ship_Back(models.Model):
    ring_name = models.CharField(max_length = 20)
    release = models.ForeignKey('Ppack', on_delete=models.CASCADE)

查看:

def index(request):
    ship_back = Ship_Back.objects.all().order_by('Ppack__ppack')

这会产生以下错误:

  / p中的FieldError   无法将关键字“Ppack”解析为字段。选择是:id,release,   release_id,ring_name

1 个答案:

答案 0 :(得分:2)

改为使用:

order_by('release__ppack')

您在过滤器中使用ForeignKey的字段名称,而不是相关模型的名称。想象一下,你对同一个模型有两个ForeignKey关系,你会如何区分它们?

因此,对于您描述的订单,您可以执行以下操作:

order_by('release__ring__ring', 'release__ppack')