首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django模型实例编辑

django模型实例编辑
EN

Stack Overflow用户
提问于 2014-03-06 08:51:59
回答 2查看 609关注 0票数 1

我有以下三种模式:

代码语言:javascript
复制
#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。

代码语言:javascript
复制
#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函数?在保存()之后?是否应该使用基于类的视图

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 09:58:24

你可以把这个放在模型里。无论何时您保存治疗,检查它是否是新的。如果是,则将isolation_status的room_number设置为false。

代码语言:javascript
复制
#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)

通过这样做,每当您添加处理(无论是在视图中还是在管理中)时,它都会工作。

票数 0
EN

Stack Overflow用户

发布于 2014-03-06 09:01:21

在保存处理对象之前,您可以这样做:

代码语言:javascript
复制
form_obj = form.save(commit=False)
form_obj.room_number.isolation_status = False
form_obj.save()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22219401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档