2个django模型上的ORDERBY查询

2个django模型上的ORDERBY查询,django,django-models,Django,Django Models,我有两个模型,即A和B。它们都有一个公共字段,比如时间戳 X = A.objects.all() Y = A.objects.all() results = chain(X,Y) # Union 现在我想对结果应用ORDERBY查询。如何才能做到这一点?您可以尝试创建一个模型对象列表,然后按其时间戳进行排序,如下所示:两个模型必须具有相同的时间戳属性: l= list(x)+list(y) l.sort(key=lambda l: l.time_stamp) 希望这就是您

我有两个模型,即A和B。它们都有一个公共字段,比如时间戳

X = A.objects.all()

Y = A.objects.all() 

results = chain(X,Y)        # Union

现在我想对结果应用ORDERBY查询。如何才能做到这一点?

您可以尝试创建一个模型对象列表,然后按其时间戳进行排序,如下所示:两个模型必须具有相同的时间戳属性:

l= list(x)+list(y)
l.sort(key=lambda l: l.time_stamp)

希望这就是您要查找的对象。

您可以尝试创建一个模型对象列表,然后按其时间戳进行排序,就像这样,两个模型必须具有相同的时间戳属性:

l= list(x)+list(y)
l.sort(key=lambda l: l.time_stamp)
希望这就是你想要的。

你的意思是:

X = A.objects.all()

Y = B.objects.all() 

results = chain(X,Y)        # Union
您可以将结果强制转换为列表。列表具有排序功能:

ut.sort(key=lambda x: x.count, reverse=True)
你的意思是:

X = A.objects.all()

Y = B.objects.all() 

results = chain(X,Y)        # Union
您可以将结果强制转换为列表。列表具有排序功能:

ut.sort(key=lambda x: x.count, reverse=True)

虽然python的方法是使用某种排序,但在Django中这通常不是正确的方法

原因是为了连接两个不同模型中的两个,您必须将它们转换为列表,正如其他答案所示

虽然这看起来不错,但大多数情况下不是这样,因为您点击了数据库,即数据库被要求提供两个模型的所有元素,以创建两个列表,并将它们合并

您将两个模型合并到一个列表中的最可能原因是,这两个模型都应派生自一个公共模型,例如抽象模型。这两个模型都有一个自然的公共域,它是抽象模型的子类

然后,可以使用以下命令对此类查询进行排序。这是更有效的,因为

编辑:

例如:

class Parent(models.Model):
   date_field = models.DateField()

   def pretty_show():
       # returns general behavior

class B(Parent):
   # other specific fields
   def pretty_show():
       # returns specific behavior

class C(Parent):
   # other specific fields
   def pretty_show():
       # returns specific behavior

X = Parent.objects.all().order_by("date_field")

for x in X:
    x.pretty_show()

注意,本例中的父类不是抽象类,子类也不是代理,但这个选择很大程度上取决于您想要实现什么。希望这有帮助。

虽然python的方法是使用某种排序,但在Django中这通常不是正确的方法

原因是为了连接两个不同模型中的两个,您必须将它们转换为列表,正如其他答案所示

虽然这看起来不错,但大多数情况下不是这样,因为您点击了数据库,即数据库被要求提供两个模型的所有元素,以创建两个列表,并将它们合并

您将两个模型合并到一个列表中的最可能原因是,这两个模型都应派生自一个公共模型,例如抽象模型。这两个模型都有一个自然的公共域,它是抽象模型的子类

然后,可以使用以下命令对此类查询进行排序。这是更有效的,因为

编辑:

例如:

class Parent(models.Model):
   date_field = models.DateField()

   def pretty_show():
       # returns general behavior

class B(Parent):
   # other specific fields
   def pretty_show():
       # returns specific behavior

class C(Parent):
   # other specific fields
   def pretty_show():
       # returns specific behavior

X = Parent.objects.all().order_by("date_field")

for x in X:
    x.pretty_show()

注意,本例中的父类不是抽象类,子类也不是代理,但这个选择很大程度上取决于您想要实现什么。希望这有帮助。

我找不到你。在这种情况下,查询将如何设计?这是我写的,它抛出error.results.order\u by=date\u time。两者都有共同的字段日期_time@user1162512我在答案中添加了一些代码来举例说明。希望有帮助。谢谢你的回复@J.C.Leitão。但我的模型类并不是相互继承的。它们只是继承了模型的特性。你知道我如何通过命令在两个模型的并集上应用order_吗?我找不到你。在这种情况下,查询将如何设计?这是我写的,它抛出error.results.order\u by=date\u time。两者都有共同的字段日期_time@user1162512我在答案中添加了一些代码来举例说明。希望有帮助。谢谢你的回复@J.C.Leitão。但我的模型类并不是相互继承的。它们只是继承了模型的特性。关于如何通过命令在两个模型的并集上应用order_的任何想法。