0

我将创建一些按“主题”和“school_classes”组织的文本。

最初,“school_class”名称将与“主题”名称相同。

因此,当我创建文本时,我需要使用“school_class”的字段信息自动填充“主题”字段。这是为了使它更容易,并且不会弄错主题,因为我已经准备好文本并且只会复制和粘贴它。

就像我创建文本时的自动复制一样,因为我将来会更改“school_class”名称。

看看我的 models.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”名称,但我希望“主题”在创建时保持原始状态。

这该怎么做?

4

1 回答 1

0

如果您想在管理员视图和您自己的视图中都拥有此功能,您应该使用信号,如下所示:

模型.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
于 2019-11-27T18:16:42.560 回答