编辑Django模型实例
我有三个模型,设置如下:
#models.py
class Room(models.Model):
room_number = models.CharField(max_length=20, primary_key=True, null=False, blank=False)
isolation_status = models.BooleanField()
class Treatment(models.Model):
room_number = models.ForeignKey(Room, primary_key=True)
treated = models.BooleanField()
class Isolation(models.Model):
room_number = models.ForeignKey(Room, primary_key=True)
当我创建一个新的治疗对象时,我需要把房间的隔离状态(Room.isolation_status)设置为假(False)。
#views.py
class AddTxView(FormView):
template_name = 'addtx.html'
form_class = TxForm
success_url = '/rooms/addtx/'
def update_iso(self, form):
instance = Room.objects.get(room_number=room_number)
instance.isolation_status = False
def form_valid(self, form):
save_it = form.save(commit=False)
save_it.save()
return super(AddTxView, self).form_valid(form)
#forms.py
class TxForm(forms.ModelForm):
class Meta:
model = Treatment
我应该在什么时候调用更新隔离状态的函数(update_iso)呢?是在保存之后(save())吗?我应该使用基于类的视图吗?
2 个回答
1
在保存Treatment对象之前,你可以这样做:
form_obj = form.save(commit=False)
form_obj.room_number.isolation_status = False
form_obj.save()
0
你可以在模型里设置这个。当你保存一个治疗记录时,检查一下它是不是新的。如果是新的,就把房间号的隔离状态设置为假(false)。
#models.py
class Room(models.Model):
room_number = models.CharField(max_length=20, primary_key=True, null=False, blank=False)
isolation_status = models.BooleanField()
class Treatment(models.Model):
room_number = models.ForeignKey(Room, primary_key=True)
treated = models.BooleanField()
def save(self, *args, **kwargs):
is_new = False
if self.pk is None:
is_new = True
super(Treatment,self).save(*args, **kwargs)
if is_new:
self.room_number.isolation_status = False
self.room_number.save()
class Isolation(models.Model):
room_number = models.ForeignKey(Room, primary_key=True)
这样做的话,无论你是在视图里还是在管理员界面添加治疗记录,它都会生效。