Django - 如何在提交表单时保存 CharField 的各个元素?
Django - How to save individual elements of a CharField when a form is submitted?
当我提交我的表单时,我希望将作为“注释”提交的文本拆分,比如按段落,并自动保存到我模型的“标签”部分。
我有以下作为我的 models.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}"
我有以下作为我的 forms.py
class NoteTagForm(ModelForm):
class Meta:
model = NoteTagModel
fields = [
'note',
]
有没有办法用 Signals 做到这一点?或者使用隐藏的内联表单集是最好的方法吗?非常感谢任何其他建议。
我知道可能需要 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
这会很好地工作,并且会完成您要求的工作。
当我提交我的表单时,我希望将作为“注释”提交的文本拆分,比如按段落,并自动保存到我模型的“标签”部分。
我有以下作为我的 models.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}"
我有以下作为我的 forms.py
class NoteTagForm(ModelForm):
class Meta:
model = NoteTagModel
fields = [
'note',
]
有没有办法用 Signals 做到这一点?或者使用隐藏的内联表单集是最好的方法吗?非常感谢任何其他建议。
我知道可能需要 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
这会很好地工作,并且会完成您要求的工作。