Django -当提交表单时,如何保存CharField的单个元素?



当我提交表单时,我希望文本以"note"被分割,比如按段落分割,并保存到标签中。我的模型的一部分自动。

我的模型如下。py


class NoteModel(models.Model):
note = models.CharField(
max_length = 5000
)
def __str__(self):
return f"{self.note}"
class NoteTagModel(models.Model):
note = models.ForeignKey(
NoteModel,
on_delete=models.CASCADE,
related_name="notes",
blank= False,
null = True,
)
tag = models.CharField(
max_length = 5000
)
def __str__(self):
return f"Note: {self.note} | Tag: {self.tag}"

我有以下作为我的表单。

class NoteTagForm(ModelForm):
class Meta:
model = NoteTagModel
fields = [
'note',
]

有这样做的信号的方法吗?或者使用隐藏的内联格式集是最好的方法吗?如有其他建议,我将不胜感激。

我理解JavaScript可能需要分离出文本并声明为变量以保存为表单值。

多谢

使用信号可以很容易地做到这一点。这里是示例代码。

from django.db.models.signals import pre_save
from django.dispatch import receiver
from .models import NoteModel
@receiver(pre_save , sender = NoteModel) 
def take_data_from_note_and_add_to_tag(sender , instance , **kwargs):
note = instance
# splitting it in paragraph form . 
data_list = note.split("n")
print(data_list)
# check the paragraph you want in the tag field , i am choosing the first one.
tag = data_list[0]
note.tag = tag


将此写入一个名为signals.py的新文件中,与你的模型所在的应用程序相同。

然后到你的apps.py中添加一个名为ready的新函数,并在其中导入你的信号。

示例代码

from django.apps import AppConfig

class SomeAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app'
# add your ready function here and import signals like this.
def ready(self) : 
import someapp.signals

这会很好地工作,并将完成你所要求的工作。

最新更新