2012-06-26 7 views
7

다른 필드 선택을 기준으로 필드 기본값을 설정하려고합니다.Django는 다른 필드를 기반으로 필드 값을 동적으로 설정합니다.

class Product(models.Model): 
     description = models.CharField('Description', max_length=200) 
     price = models.FloatField('Price') 

class Sell(models.Model): 
     product = models.ForeignKey(Product) 
     price = models.FloatField('Price') 

각 "제품"기본 가격 (또는 제안 된 가격)이 있으므로 사용자가 관리자 페이지에 새로운 판매 그가를 추가 할 때/그녀가를 선택 기본적으로, 이들은 클래스입니다 product.price에서 제안 가격 Sell.price로 동적으로 복사해야합니다. 사용자가 그 순간에 변경할 수 있기 때문에 "저장"방법을 사용할 수 없습니다.

JavaScript를 명시 적으로 사용해야합니까? 또는 장고에 우아한 방법이 있습니까?

답변

3

미리 저장 후크를 사용하거나 판매 모델의 save() 메소드를 재정 의하여 처리 할 수 ​​있습니다.

+1

또 다른 방법은 모델의'clean()'메소드에서'price' 필드를 초기화하는 것입니다. 'save()'를 무시하는 것보다는'super()'를 호출 할 필요가 없기 때문에 더 깨끗합니다. –

1

Admin 웹 페이지에서 양식 필드 값을 동적으로 업데이트 하시겠습니까? 클라이언트 측 폼 동작은 JavaScript에서 발생해야합니다. Django의 관리자는 특히 인라인 추가/제거를위한 스크립팅을 일부 제공하지만이 수준에서는 기능을 제공하지 않습니다.

장고 관리자는 window.django.jQuery (또는 단지 django.jQuery) 페이지 컨텍스트에서 jQuery를 제공합니다. Django Forms는 항상 안정적인 양식 필드 ID를 출력합니다. 출력 양식 코드를 검사하고 Product 선택기 및 해당 Sell.price 입력 필드를 찾으십시오. 그런 다음 jQuery를 사용하여 .change() 또는 .on('change', ...) 처리기를 Sell 필드의 가격을 업데이트하는 함수로 Product 선택기에 추가하는 것과 같은 작업을 수행 할 수 있습니다. 나중에 참조 할 수 있도록

은 장고 관리자 거의 DateTimeField, 외래 키,도 ManyToManyField 필드를 허용하지 않습니다 ModelAdmin.prepopulated_fields하지만

prepopulated_fields와 귀하의 요청을 충족합니다.

관련 문제