【问题标题】:Extracting min and max value of Django model feature in template提取模板中 Django 模型特征的最小值和最大值
【发布时间】:2019-08-28 18:36:34
【问题描述】:

我有一个这样的模型:

class Integer(models.Model):
    integer_value = models.IntegerField(default=0)
    current_price = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
    share = models.IntegerField(default=0)
    market = models.ForeignKey(
        IntegerMarket,
        on_delete=models.CASCADE,
        related_name='integers',
        default=None)

    def __str__(self):
        return str(self.integer_value)

    class Meta:
        ordering = ['integer_value']

我正在使用以下视图:

class IntegerMarketDetailView(LoginRequiredMixin, DetailView):
    model = IntegerMarket
    template_name = 'integer_market_detail.html'
    login_url = 'login'

在我的模板中,即IntegerMarket 的给定实例,我想提取integer_value 的最小值和最大值,然后在JavaScript 中定义轴的最小值和最大值。

例如,我可能有一个 IntegerMarket 实例,其中包含五个 integersinteger_value 分别为 1 到 5。然后我想提取 1 作为最小值和 5 作为最大值。

最直接的方法是什么?

【问题讨论】:

  • 这个模板是针对单个 Integer 实例的详细信息,还是多个列表?您使用的是哪种视图?
  • 谢谢,@DanielRoseman。该模板用于IntegerMarket 的实例。 IntegerMarket 的每个实例将有几个与之关联的Integer 实例(即integers,根据相关名称)。我已经在原帖中添加了视图。

标签: javascript django


【解决方案1】:

给定IntegerMarket 的实例integer_market,您可以使用.integers 获取所有相关的Integer 实例,因为您将其设置为related_name

现在您可以使用MaxMin 进行聚合。

from django.db.models import Max, Min
integer_market.integers.aggregate(Max('integer_value'), Min('integer_value'))

>> {'integer_value__max': 10, 'integer_value__min': 0}

【讨论】:

  • 谢谢,德克格罗滕!但是有没有办法把它选为(比如)10,而不是模板端的{'integer_value__max': 10}?这样,我可以使用双花括号将其直接输入 javascript。
  • 这就是我显示的重复值。这是一个带有键 integer_value__maxinteger_value__min 的字典
  • 因此,如果您将其作为上下文变量v 传递给您的模板,您可以使用{{ v.integer_value__max }} 在您的HTML 文件中设置值。
【解决方案2】:

Django 提供在查询中定义的最大值和最小值。

从 django.db.models 导入 Max、Min

然后在定义您的查询时,您将拥有类似

的内容
my_query = models.IntegerMarket.objects.all().annotate(max_integer=Max('integer_value')).annotate(min_integer=Min('integer_value'))

然后,您可以使用 max_integer/min_integer 或您命名的任何名称在视图中调用这些值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2018-06-11
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多