有没有一种方法可以根据创建日期的另一个模型来过滤一个模型?

时间:2019-05-10 14:42:25

标签: sql-server reactjs django-rest-framework

编辑:BLAH BLAH没有代码QQ。我知道这是一堵文本墙,因此在您进入并耸耸肩膀或发布无用的注释之前,您会理解为什么这里没有任何代码。另一方面,如果您要问我您认为可能有助于解决问题的代码中的特定部分,则是另一回事。

这实际上是一个概念性问题,而不是我可以实际显示的代码。如果需要,请问我,我会发布我可以做的事,但实际上您可以假设我有一个标准的工作模型,序列化程序,并且认为我不知道如何实现我要的功能。我有一个运行REST框架的Django应用程序。我有两个模型。让我们称它们为引号和线条。将报价图示为收据。该收据中的行会告诉您其中的每个项目以及有关该项目的其他任何信息(例如费用)。我可以单独在API中展示这两种方法。问题是,当我尝试实际加载用户需要的整个数据集时,我所显示的数据经过过滤仅显示过去两年仍显示39,000个结果。现在,想象每个报价最多有50行,您可以看到我的问题从哪里开始。因为报价中有我可以过滤的日期,但是行之间是通过“ QuoteID”关联的,所以我无法弄清楚如何在模型/序列化器中过滤行,因此我只能通过最近两年的过滤器提取报价,之后我只能检索具有与拉引号匹配的ID的行。本质上,在SQL中,这将是内部联接。我需要在Django REST框架中执行此操作,以使我的应用程序每次删除结果上限时都不会崩溃。抱歉,我知道这是一堆冗长的文字,但是由于我的代码在这里并没有真正的帮助,因此我想更详尽。如果您需要查看任何代码以帮助从概念上进行分类,请告诉我,我将其发布。

我已经使用models.foreignkey()给了模型一个关系。确实可以使它们根据IE第1-5行与报价ID 1匹配的关系正确显示,但这并不能适当地将行数据限制为仅使用日期过滤器下拉的报价。

我确实有一种工作关系,如果我将结果限制为任意小的数字,比如说60,我会得到60个引号和60行具有正确匹配ID的行,但是不幸的是,这并不完全正确,因为60个引号理论上可能有300行,因为每个引号可以有很多行。因此,当我打开搜索结果的上限时,我需要它给我2年的报价,按日期过滤,而只有与那2年有关的行,按ID过滤。

我希望有一种方法可以用以前接收到的另一种模型对一个模型(线模型)进行本质上的过滤。我从生产线获得的结果越少越好。我考虑过直接从前端进行简单的查询,因为这将使我可以在选择时专门拉一个引号行数据,但是我希望尽可能将所有数据库连接都保留在后端。

1 个答案:

答案 0 :(得分:0)

我认为您要执行的操作是提取过去x年(天,无论如何)中的引号以及与之相关的行?

如果是这样,您可以在报价序列化程序中引用行序列化程序,然后在单击quote api时,它将返回带有与之相关的嵌套行的报价: https://www.django-rest-framework.org/api-guide/relations/#nested-relationships

在您的情况下,我认为(根据即时阅读的内容),您会遇到以下情况:

class LineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Line
        fields = ('thing', 'date', 'etc')

class QuoteSerializer(serializers.ModelSerializer):
    lines = LineSerializer(many=True, read_only=True)

    class Meta:
        model = Quote
        fields = ('quote_name', 'etc')

现在,当您点击报价视图时,您将获得与之相关的行,因此只需要过滤报价即可

或者,如果您确定要击中线终点并希望与给定报价相关联的线,则可以执行以下操作: lines = Line.objects.filter(Quote__QuoteID=givenQuoteId) 请注意,“报价”可能会有所不同,具体取决于您命名相关模型的方式

相关问题