我有两个型号,
项目和交易
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中的记录?感谢。
答案 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)