根据关系模型值自动创建模型对象

时间:2019-05-08 12:59:34

标签: python django

我有一个模型,其中包含一些字段,基于模型中的一个字段值,我们需要在另一个具有默认值的模型中创建n个对象。

我有一个名为Room的模型,它包含一个名为number_of_beds的字段,基于该字段,我们需要在称为Bed的模型中创建n个对象。

Room(models.Model):
  room_no = IntegerField(primary_key=True,unique=True)
  number_of_beds = IntegerField()
  '''
  and so on
  '''

Bed(models.Model):
 room_no = models.ForeignKey('Room', on_delete=models.SET_NULL, null=True)
 bed_no = models.IntegerField(blank=True,default='Increment value')
 '''
 and so on
 '''

如果number_of_beds = 2,则需要在Bed中使用默认值在同一外键下创建两个对象。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是覆盖save

Room(models.Model):
  room_no = IntegerField(primary_key=True,unique=True)
  number_of_beds = IntegerField()

  def save(self, *args, **kwargs):
      super().save(*args, **kwargs)
      if self.number_of_beds > 0:
          for num in range(1, self.number_of_beds + 1):
              Bed.objects.get_or_create(room_no=self, bed_no=num)
      # clean extra beds
      self.bed_set.filter(bed_no__gt=self.number_of_beds).delete()