【问题标题】:Basic Django Query基本 Django 查询
【发布时间】:2016-10-06 18:34:03
【问题描述】:

简单的场景,但不知道如何查询:

我们有一个Store 模型和Transaction 模型。 Foreign KeyTransaction 模型上与Store 相关。

我想查询以下列表: 当天完成至少一次 交易的商店。应排除所有其他商店。


Store.objects.filter(transaction__gt=0, transaction__date_created__gt='2016-06-01')

当我尝试前一个查询时,我得到了一个很长的列表:

[<Store: TrialStore>, <Store: TrialStore>, <Store: TrialStore>, ... ]

这几乎就像它为每笔交易列出一个商店的实例。我只想要一份每家商店当天至少完成一笔交易的列表。

目前,数据库中只有一个商店,所以我应该只返回一个结果。

编辑

Store模特:

class Store(models.Model):
  status = models.IntegerField(choices=status_choices, default=ACTIVE_STATUS)
  legal_name = models.TextField(verbose_name='Legal Name')
  mobile_number = PhoneNumberField(blank=True)
  email_address = models.EmailField(blank=True)

Transaction模特:

class Transaction(models.Model):
  store = models.ForeignKey(Store)
  date_created = models.DateTimeField(auto_now_add=True, verbose_name='Created')
  status = models.IntegerField(choices=status_choices)

【问题讨论】:

  • 你能展示你的模型吗?

标签: django orm foreign-keys django-queryset


【解决方案1】:

你应该使用distinct():

Store.objects.filter(transaction__gt=0,
                     transaction__date_created__gt='2016-06-01').distinct()

【讨论】:

    【解决方案2】:

    您可以在查询时将日期时间字段转换为date

    Store.objects.filter(transaction__date_created__date=Date(2016, 1, 1))
    

    【讨论】:

      【解决方案3】:

      这个呢?

      Store.objects.filter(
          transaction__gt=0, 
          transaction__date_created__year='2016', 
          transaction__date_created__month='06',
          transaction__date_created__day='01'
      )
      

      在您的查询中,您是说“给我所有自 2016.06.01 以来有交易的商店”。通过我的查询,“给我从今天开始有交易的所有商店”

      【讨论】:

      • 即使我实际上是在查询“自 2016.06.01 以来”,我不应该仍然只得到一个结果吗?从那时起,只有一家商店一直在进行交易。不是三个。
      猜你喜欢
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多