我将创建一些文本,并按“主题”和“ school_classes”进行整理。
最初,“ school_class”名称将与“ subject”名称相同。
因此,当我创建文本时,需要使用“ school_class”字段信息自动填充“主题”字段。这是为了使它更容易,并且不会犯错主题,因为我已经准备好了文字,并且将其复制并粘贴。
像自动复制一样,仅在创建文本时,因为将来我会更改“ school_class”的名称。
查看我的模型。py 我尝试:
from django.db import models
class Texts(models.Model):
school_class = models.ForeignKey(School_class, on_delete=models.DO_NOTHING)
subject = models.CharField(max_length=200, blank=True)
body = models.CharField(max_length=200, null=True, blank=True)
def subject(self):
return self.school_class
def __str__(self):
return self.subject
问题是,当我更改“ school_class”中的信息时,会自动更改“主题”中的信息。
我为什么需要这个?
将来,我将修改所有课本的“ school_class”名称,但我希望“主题”在创建时保留原始名称。
该怎么做?
答案 0 :(得分:0)
如果您想同时在管理员和自己的视图中使用此功能,则应使用信号,如:
models.py :
from django.db import models
from django.dispatch import receiver
from django.db.models.signals import pre_save
class Texts(models.Model):
school_class = models.ForeignKey(School_class, on_delete=models.DO_NOTHING)
subject = models.CharField(max_length=200, blank=True)
body = models.CharField(max_length=200, null=True, blank=True)
def statement(self):
return self.collection
def __str__(self):
return self.subject
@receiver(pre_save, sender=Texts)
def texts_pre_save_receiver(sender, instance, **kwargs):
if not instance.pk:
instance.school_class = instance.subject