Django-如何在同一个类中复制字段

时间:2019-11-27 18:06:12

标签: python django django-models

我将创建一些文本,并按“主题”和“ 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”名称,但我希望“主题”在创建时保留原始名称。

该怎么做?

1 个答案:

答案 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