【问题标题】:How to perform reverse relation in django?如何在 django 中执行反向关系?
【发布时间】:2018-10-09 13:55:59
【问题描述】:

这是我的模型:

class Journal(models.Model):
    Start_Date = models.DateField(default=datetime.date(2018,4,1),blank=False)
    End_Date = models.DateField(default=datetime.date(2019,3,31),blank=False)
    Date = models.DateField()
    By = models.ForeignKey(ledger1,on_delete=models.CASCADE,related_name='Debitledgers')
    To = models.ForeignKey(ledger1,on_delete=models.CASCADE,related_name='Creditledgers')
    Debit = models.DecimalField(max_digits=10,decimal_places=2)
    Credit = models.DecimalField(max_digits=10,decimal_places=2)

我想过滤日志模型的“Start_Date”和“End_Date”内的日志对象...

我的意思是说日记中的“日期”必须在日记的“开始日期”和“结束日期”之间......

这可能是我问的一个愚蠢的问题...但是,当我正在学习 django 时,这对我来说并不容易...

谁能告诉我怎么做???

提前谢谢你

【问题讨论】:

  • 所以你有Start_date 和/或End_Date?输入是什么,输出应该是什么?
  • 我不会给出答案,因为我不清楚你想要做什么查询,但请尝试查看官方文档(Django 有一些我在任何地方都见过的最好和最详细的!),尤其是这里:docs.djangoproject.com/en/2.1/topics/db/queries
  • 我想过滤在selectdate对象的'Start_Date'和“End_Date”内创建的所有日志对象
  • @NiladryKar:但是为什么你在这里有一个ForeignKey 到一个Journal
  • related_name='journals'非常奇怪的,因为这是相反的关系,所以逻辑上的结果是命名为selectiondates

标签: python django django-models


【解决方案1】:

尝试像这样使用F expression

Journal.object.filter(journals__Start_Date__gt=F('Date'), journals__End_Date__lt=F('Date'))

实际上,尚不清楚Selectdate 模型究竟做了什么。如果您仅出于过滤目的创建它,则可以将其删除并在没有它的情况下使用 ORM:

Journal.object.filter(Date__gt=some_date_start, Date__lt=some_date_end)

至于更新的问题,您可以这样做:

Journal.object.filter(Start_Date__gte=F('Date'), End_Date__lte=F('Date'))

【讨论】:

  • journals__ 来自哪里?
  • @WillemVanOnsem Journal 字段有 related_name='journals' 参数。
  • 根据我的模型...如何在您的答案中添加“日期”出现在期刊模型类中?
  • 是的,它仅用于过滤目的
  • @NiladryKar 我已经更新了我的答案。您需要两个变量some_date_startsome_date_end。基于此变量,您可以使用以下查询获取此时间间隔内的所有期刊:Journal.object.filter(Date__gt=some_date_start, Date__lt=some_date_end)
猜你喜欢
  • 2018-07-05
  • 2014-05-27
  • 1970-01-01
  • 2022-06-22
  • 2021-11-07
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多