编辑Django模型实例

1 投票
2 回答
716 浏览
提问于 2025-04-17 21:05

我有三个模型,设置如下:

#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)

这样做的话,无论你是在视图里还是在管理员界面添加治疗记录,它都会生效。

撰写回答