django以编程方式为positiveIntegerField赋值

2021-10-17 18:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个小的django应用程序,其中模型包含一个TextField和一个PositiveIntegerField。你知道吗

我需要用PositiveInegerField中的字数填充TextField。你知道吗

这可以通过自定义javascript代码来完成,该代码计算TextField文本区域中的字数,并在提交表单之前将值放入word count字段文本框,但我不想在admin中使用自定义javascript。你知道吗

如何以编程方式为PositiveIntegerField赋值?你知道吗

2条回答
网友
1楼 ·

这可以使用pre_save Signal实现。你知道吗

创建如下信号函数:

def calculate_wordcount(sender, instance, **kwargs):
    # count the words...
    instance.word_count = # your count from line above

然后将此函数附加到您的模型。自从django1.7以来,首选的方法是应用程序配置(参见doc)。你知道吗

可以在AppConfigready()-方法中附加函数

def ready(self):
    pre_save.connect(calculate_wordcount,
                     sender= ,# your model
                     weak=False,
                     dispatch_uid='models.your_model.wordcount')

我会留下所有必要的进口取决于你,请评论,如果你需要进一步的方向!你知道吗

网友
2楼 ·

一般来说,我认为save signals是一个合理的想法,在这种情况下,您还可以自己重写.save()

class MyClass(models.Model):

    [stuff]

    def save(self, *args, **kwargs):
        self.wordcount = #something that calculates wordcount
        super(self.myClass, self).save(*args, **kwargs) #Call django's save!

(根据经验,如果我只是对一个模型进行操作,我将覆盖save(),但是如果我使用一个模型来影响另一个模型,则使用一个信号。这样做的目的是在代码中保留所有影响模型的因素。但这涉及到个人哲学)

同时警告:无论您使用哪个版本,信号或覆盖save()bulk_createbulk_delete都不会发送信号或调用特定的save函数。请参阅此处的文档:https://docs.djangoproject.com/en/1.8/topics/db/models/#overriding-predefined-model-methods

相关问题