2011-12-08 3 views
0

에는 두 개의 날짜 필드가 포함 된 거래 모델이 있습니다. 첫 번째는 start_date이고 다른 하나는 end_date입니다. 내 목표는 내가이 두 date_field의 빼기를 나타내는 읽기 전용 필드를 업데이트하려는 거래를 저장할 때입니다.읽기 전용 필드 업데이트 관리자 모델

위젯을 쓰려고하지만 필드 중 하나만 가져올 수 있습니다. 내 위젯은 다음과 같습니다.

선택한 날짜에 하루가 추가되었으므로 다른 필드의 값을 어떻게 얻을 수 있습니까? 아니면 다른 방법이 있습니까?

답변

1

diff를보기 위해 새로 고치지 않아도된다면 (즉, 모델을 저장 한 후에 만 ​​볼 수 있습니다.) 더 쉬운 접근법은 관리자에게 읽기 전용 필드를 추가하는 것입니다. 이 같은 기능 :

class MyModelAdmin(ModelAdmin): 
    readonly_fields = ('dates_difference',) 

    #add your other fields, or put it in a fieldset 
    fields = ('dates_difference',) 

    def dates_difference(self, model_instance): 
     return model_instance.end_date - model_instance.start_date 

당신의 목표는 단지이 아닌 필드의 위젯이나 모델의 클래스에 코드를 넣을 수있는 장소입니다 모델의 관리에서 추가 정보를 표시하는 것입니다.

readonly_fields documentation이 지정하는대로 그 동작은 list_display과 거의 동일합니다. 즉, 모델과 모델의 관리자 및 호출 가능 메소드에 대한 속성을 가리킬 수 있습니다.

+0

감사! 이게 내가 원한거야. – iva123

1

계산 된 데이터를 저장하려면 모델에서 save()을 덮어 씁니다.

def save(self, *args, **kw): 
    self.diff = self.end_date - self.start_date 
    return super(YourModelClass, self).save(*args, **kw) 

자세한 내용은 reading the Django documentation을 참조하십시오.

관련 문제