当前位置: 首页 > 面试题库 >

Django自定义注释功能

尹承泽
2023-03-14
问题内容

我想使用Django建立一个简单的热门问题列表。我有一个函数,可以根据一些参数评估每个问题的“
热度 ”。

功能看起来与此类似(此处为完整功能)

def hot(ups, downs, date):
    # Do something here..
    return hotness

我的问题和投票模型(相关部分)

class Question(models.Model):
    title = models.CharField(max_length=150)
    body = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

class Vote(models.Model):
    question = models.ForeignKey(Question, related_name='questions_votes')
    delta = models.IntegerField(default=0)

现在,它delta attribute是正数或负数。热功能会收到正面投票数和负面投票数以及问题的创建日期。

我已经尝试过类似的方法,但是它不起作用。

 questions = Question.objects.annotate(hotness=hot(question_votes.filter(delta, > 0),question_votes.filter(delta < 0), 'created_at')).order_by('hotness')

我得到的错误是:global name 'question_votes' is not defined
我理解该错误,但是我没有正确的方法。


问题答案:

您不能将python函数用于注释。注释是在数据库级别完成的计算。Django只为您提供一组可以由数据库处理的基本计算-
SUM,AVERAGE,MIN,MAX等…对于仅来自1.8版的更复杂的内容,我们提供了一个用于更复杂的查询表达式的API
。在Django
1.8之前,实现类似功能的唯一方法是使用.extra,这意味着编写纯SQL。

因此,您基本上有两个半选择。

一年半

.extra如果您的Django版本> = 1.8,则使用或通过新API以纯SQL编写热度计算。

第二。

在模型内部创建热点字段,该字段将由cron作业每天一次(或根据您的需要更频繁地)进行计算。并根据您的需要使用它(最热门的列表)。



 类似资料:
  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

  • 问题内容: 我为我写了一个 对于每个我使用以下注释 因此,我决定定义自己的注释女巫,其中包含所有这样的注释 然后,我只用了一个注释 修改后,测试失败 为了使其再次工作,需要我将其添加到 我的问题是为什么我的注释包含注释时不起作用?注释有什么特别之处吗?还是我错过了什么? PS:我使用相同的方法,它们也很好用。 问题答案: 这种机制是Spring框架特有的,在这种机制中,您可以使用本身带有其他注释的

  • 使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。 连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 ":起始行,终止行 s/^/#/g",例如: :1,10s/^/#/g 表示在第 1~10 行行首加"#"注释。"^"意为行首;"g"表示执行替换时不询问确认。如果希望

  • > 我不能使基本包属性是动态的,即我不能传递,但需要在配置中预先定义包。 我查看了,但无法使其工作。 当我忽略基本包时,扫描从注释的定义包开始,而不是从注释类的包开始。在上面的示例中,它只扫描并创建中类的bean,而不扫描并创建中的bean。 如果将放在类上,则一切都可以工作,但当将其移动到的元注释时,将停止工作。如何告诉Spring Framework将视为使用某些默认值指定的另一种方式。我尝试

  • 我发现了几个与此相关的(不是重复的)问题,但它们不能让我满意。 我无法理解在哪里以及为什么要使用? 我在一本书中读到了一个自定义注释的示例,但没有详细解释。 myMeth()内的输出与预期一致。 关于这个例子,我有几个问题。 1-如何在此程序中使用和?或