【发布时间】:2021-01-05 09:32:41
【问题描述】:
我有两个型号 Label 和 AlternateLabel。每个Label可以关联多个AlternateLabel,即它们之间存在ForeignKey关系。
class Label(models.Model):
name = models.CharField(max_length=55, blank=True, unique=True)
lower_range = models.FloatField(null=True, blank=True)
upper_range = models.FloatField(null=True, blank=True)
def __str__(self) -> str:
return f"{self.name}"
class AlternateLabel(models.Model):
name = models.CharField(max_length=55, blank=False)
label = models.ForeignKey(to=Label, on_delete=models.CASCADE)
class Meta:
unique_together =('name', 'label')
def __str__(self) -> str:
return f"{self.name}"
def __repr__(self) -> str:
return f"{self.name}"
当创建Label 时,还会使用post_save 信号创建一个AlternateLabel。
@receiver(post_save, sender=Label)
def create_alternatelabel(sender, instance, created, **kwargs):
"""
when label is created an alternate label with name as label is also created
"""
if created:
AlternateLabel.objects.get_or_create(
name = instance.name,
label = instance
)
我还希望 AlternateLabel 在更新 Label 名称时更新,为此我尝试了这个
@receiver(post_save, sender=Label)
def save_alternatelabel(sender, instance, created, **kwargs):
"""
when label is saved an alternate label with name as label is also saved
"""
Label.alternatelabel_set.filter(
name=instance.name,
label = instance
).first().save()
但是,在更新Label 时我收到错误None type object has not method save(),我知道这是因为,这种方法试图用新的Label 实例name 找到AlternateLable不存在。几个小时以来,我一直在努力想办法实现这一目标。如有任何建议或指导,我将不胜感激。
【问题讨论】:
标签: django django-models django-views django-signals