2014-03-06 2 views
1

나는 다음과 같이 설정 3 개 모델을 가지고 : 나는 새로운 치료 객체가 False로 Room.isolation_status 필드를 설정 만들 때해야 할 일은장고 모델 인스턴스 편집

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

.

#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() 후에? 내가 치료를 저장하기 전에

+0

* * 클래스 기반보기를 사용하고 있습니다. –

답변

0

당신은 모델이 설정할 수 있습니다. 치료법을 저장할 때마다 치료법이 새로운 것인지 확인하십시오. 이 경우 room_number의 isolation_status를 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) 

이렇게하면 치료를 추가 할 때마다 (보기 또는 관리자에있을 때) 작동합니다.

1

위한 클래스 기반의 뷰를 사용해야 당신이 좋아 할 수있는 객체 :

form_obj = form.save(commit=False) 
form_obj.room_number.isolation_status = False 
form_obj.save() 
+0

실제로, form_valid를 오버라이드하고 commit = False로 save를 호출하는 유일한 이유가 있습니다. 나는 왜 OP가 이미 그것을하고 있었는지 상상할 수 없다. –