django在给定日期之前选择记录

时间:2014-12-09 15:09:11

标签: django

我有两个型号,

项目和交易

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的事务。

我需要在给定日期之前选择在事务表中有记录的项目。如果一个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中的记录?感谢。

1 个答案:

答案 0 :(得分:-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)