【问题标题】:django select records before given datedjango 选择给定日期之前的记录
【发布时间】:2014-12-09 15:09:10
【问题描述】:

我有两个模型,

项目和交易

class Item(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)
    name = models.CharField(max_length=48, verbose_name=_(u'Name')) 

class Transaction(models.Model):
    transactionItem = models.ForeignKey(Item, verbose_name=_(u'Transaction Item'))
    createdDate = models.DateField(default=datetime.date.today(), verbose_name=_(u'Date'))

所以在 db 中,Transaction 表将包含 Item 的交易。

我需要选择在给定日期之前在交易表中有记录的项目。如果一个项目在给定日期之前和之后有交易,我需要忽略它。

编辑:示例数据 物品表

--------------------------
| id       | name        |
--------------------------
| 1277     | Diode       |
--------------------------
| 1278     | Resistor    |
--------------------------

交易表

---------------------------------------------
| id       | transactionItem  | createdDate        |
---------------------------------------------
| 1        | 1277             | 2014-01-14  |
---------------------------------------------
| 2        | 1277             | 2014-02-09  |
---------------------------------------------
| 3        | 1278             | 2014-01-08  |
---------------------------------------------

如果给定日期是 2014-01-13,我应该只从事务表中获取 id = 3 的记录。

如何过滤django中的记录?谢谢。

【问题讨论】:

  • 不明白你的问题:“我需要选择在给定日期之前在交易表中记录的项目。如果项目有交易在给定日期之前和之后,我需要忽略它。”你能发布示例数据吗?
  • 我编辑了我的问题。基本上我需要在给定日期之前从事务 tbl 中选择所有记录。这是为了列出自给定日期以来没有移动的项目。

标签: django


【解决方案1】:

我尝试使用注释,但它仍然为我提供日期小于和大于给定日期的交易。但是我使用下面的查询得到了正确的结果,

idle_ids = ( Transaction
        .objects
        .filter( date__lte = some_date )
        .values_list('transactionItem__id', flat=True)
        .distinct()
        .order_by()
        )

idle_ids2 = ( Transaction
        .objects
        .filter( date__gte = some_date ).filter(transactionItem_id__in=idle_ids)
        .values_list('transactionItem__id', flat=True)
        .distinct()
        .order_by()
        )

items = Item
     .objects
     .filter(id__in=idle_ids).exclude(id__in=idle_ids2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多