如何在数据库中保存数据时,函数生成的数据会自动插入Django ORM字段



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

我在数据库中有一个title字段,它存储书的标题,但我想添加一个chunk_title字段来存储书的名称,它分为3个字符的块,我写了一个这样做的方法,但当插入数据库时,我需要它,它被自动应用,其结果被插入chunk_title

这是我的DB模型,其中最后一个字段是我想自动将值生成到 :的字段

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)

最新更新