python - 如何使得在数据库中保存数据时,函数生成的数据自动插入到Django ORM字段中

标签 python django django-models

我正在 Django 上编写一个网站,遇到了问题

我在数据库中有一个 title 字段,用于存储图书的标题,但我想添加一个 chunk_title> 字段,它将存储书名,分为 3 个字符的 block ,我编写了一个方法来执行此操作,但我需要在插入数据库时​​自动应用它并插入其结果进入chunk_title

这是我的数据库模型,其中最后一个字段是我想要自动生成值的字段:

class Book(models.Model):
    """
    Клас,який зберігає всі книги на сайті
    """

    title = models.CharField(max_length=120, default=' ', verbose_name='Назва')
    description = models.TextField(verbose_name='Опис')
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категорія')
    date_at = models.DateField(auto_now_add=True, verbose_name='Дата створення')
    image = models.ImageField(upload_to='photos/%Y/%m/%d/')
    authors = models.ManyToManyField(Author, verbose_name='Автори')
    content = models.FileField(upload_to='contents/%Y/%m/%d/', blank=True)
    price = models.IntegerField(verbose_name='Ціна', default='0')
    chunk_title_book = models.TextField(default=' ')

这是我的方法,我想将其结果插入到该字段中(它位于同一个类中,即 Book 中):

    def chunk_title(self, string: str) -> str:
        """
        Розбиває назву книги на чанки по 3 символи макисмум для подальшого пошуку по цих чанках
        """
        chunk_string = ' '.join(textwrap.wrap(string, 3))
        return chunk_string + ' ' + ' '.join(string.split())

有谁知道这是否可以实现,如果可以,如何实现?

最佳答案

需要重写django Model的save方法,并通过调用函数为chunk_title_book赋值:

class Book(models.Model):
    """
    Клас,який зберігає всі книги на сайті
    """
    .
    .
    .
    .
    def save(self, *args, **kwargs):
        # overwriting `chunk_title_book` attribute 
        # Assumes chunk_title function is Book class's method
        self.chunk_title_book = self.chunk_title(self.title)
        super(Book, self).save(*args, **kwargs)

关于python - 如何使得在数据库中保存数据时,函数生成的数据自动插入到Django ORM字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73910260/

相关文章:

python - 如何使用setuptools安装到自定义目录?

javascript - 使用 Python 从文件中读取 JavaScript 变量

python - 如何找到数组中最长的连续数字链

python - 如何在 Django 数据库模型的字段中存储字典

javascript - 如何从 Django 表单库中隐藏复选框并使用 Javascript 切换其显示属性

python - 理解 Python 中的研究

python - Django TemplateView 上下文未在模板上呈现

python - 使用输入编辑模型。值错误

django - 指定现有 ManyToMany "through table"关系之一的最佳方法?

python - 用户信息未保存