2009-12-26 5 views
0

이것은 장고에서 커스텀 필드를 만드는 것에 관한 질문입니다. TextField에서 상속받은 EditAreaField이라는 필드를 만들고 있습니다. 나는이 분야에 사용자 정의 위젯을 할당하고있어 5 라인에Django에서 formfield() 메서드를 호출하는시기는 언제입니까?

class EditAreaField(models.TextField): 
    description = "A field for editing the HTML of a page" 
    def formfield(self, **kwargs): 
     defaults = {} 
     defaults['widget'] = EditArea() # setting a new widget 
     defaults.update(kwargs) 
     return super(EditAreaField, self).formfield(**defaults) 

: 여기처럼 내 코드가 어떻게 표시되는지를 보여줍니다. 온라인으로 6에서 매개 변수를 업데이트합니다.

문제는 Django가 django.contrib.admin.widgets.AdminTextareaWidget으로 설정된 매개 변수 widget을 보내고 내 EditArea() 위젯을 덮어 씁니다.

어떻게 장고가 설정하는 값을 변경할 수 있습니까?

 defaults.update(kwargs) 
     defaults['widget'] = EditArea() # override django here 

그러나 그것을 할 수있는 가장 좋은 방법은 그 정말 : 내 코드처럼 보이는, 그래서 분명히 난 그냥, 선 5와 6을 전환하여 자신의 설정을 덮어 쓸 수 있을까?

부수적으로 장고 사이트의 formfield() 함수에 관한 문서를 찾을 수 없었습니다. 사용되지 않는 이유는 무엇입니까?

+0

질문에 대한 답변을 드리겠습니다. 다음은 formfield의 문서 링크입니다. [http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.formfield](http://docs.djangoproject.com) /en/dev/howto/custom-model-fields/#django.db.models.formfield) – czarchaic

+0

죄송합니다. http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.formfield – czarchaic

답변

1

formfield 메서드가 ModelForm 헬퍼에 의해 호출 된 것처럼 보입니다. 문서에 따르면 formfield 메서드에는 form_class 특성 만 포함되어이 사용자 지정 모델 필드의 formfield 클래스를 가리켜 야합니다. 이것은 기본 위젯이 정의 된 사용자 정의 (또는 기본) 양식 필드 클래스입니다.

from myapp.forms import MyCustomFormField 

#create a custom model field 
class EditAreaField(models.TextField): 
    def formfield(self, **kwargs): 
    defaults={'form_class': MyCustomFormField}#pass our custom field as form_class 
    defaults.update(kwargs) 
    return super(EditAreaField, self).formfield(**defaults) 
+3

슈퍼를 돌려 보내면 안됩니까? ...? – andi

관련 문제