如何根据Django中相同模型的其他字段ID过滤字段值

Posted

技术标签:

【中文标题】如何根据Django中相同模型的其他字段ID过滤字段值【英文标题】:how to filter field values based on other field id of same model in Django 【发布时间】:2021-11-03 15:23:48 【问题描述】:

这里我要过滤每个组的所有项目

让我们将我的模型视为

class ItemsList(models.Model):
   invoice_number = models.IntegerField(blank=True, null=True)

class ItemsInvoice(models.Model):
    items = models.ForeignKey(ItemsList)

class StockItems(models.Model):
     item_invoice = models.ForeignKey(ItemsInvoice, blank=True, null=True)
     group_id = models.IntegerField(blank=True, null=True)

例如,让我们将我的数据库值视为:

item_invoice    |    group_id
 
 2206           |   1
 2207           |   1
 2208           |   2
 2209           |   3
 2210           |   4
 2211           |   4
 2212           |   4
 2213           |   5

现在我该如何编写基于 group_id 过滤 item_invoice 并基于此 item_invoice id 过滤项目并基于这些项目 id 过滤 invoice_number 的过滤语句

【问题讨论】:

我仍然不清楚你的目标是什么。 您是否要获取带有item_invoiceStockItems 与相关的IntemsList 发票号。 基于 StockItems 的 group_id 我需要首先获取 item_invoice 的 items_id 到相关的 IntemsList 发票号 所以如果你用group_id = 4查询,那么你想检索id为221022112212InvoiceItems? 我不清楚invoice_number 在这里做什么,因为StockItemsItemInvoice 之间存在直接联系。因此,这意味着无需查看 ItemsList 即可查询关系。 【参考方案1】:

你可以通过过滤相关StockItemsgroup_id来过滤ItemInvoices:

ItemsInvoice.objects.filter(stockitems__group_id=<em>my_group_id</em>).distinct()

其中 my_group_id 是我们正在寻找的group_id。如果有多个StockItems 对象链接到同一个ItemsInvoicegroup_id,那么由于.distinct() [Django-doc] 调用,我们将只为每个ItemsInvoice 检索一个实例。

【讨论】:

以上是关于如何根据Django中相同模型的其他字段ID过滤字段值的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项

Django 数据模型的字段列表整理

如何根据 django 模板中的日期过滤列表

使用可变数量的参数过滤多个 Django 模型字段

Django数据模型——数据库字段类型

Django如何过滤多对多字段中的对象,而不是原始查询集