2012-10-20 5 views
1

일반 텍스트 파일 편집기를 모델링하지만 데이터베이스 대신 파일 시스템과 상호 작용하는 사용자 정의 필드를 장고에 작성하려고합니다. 예를 들어Django 사용자 정의 파일 편집기 필드

:

class FileEditorField(models.TextField): 
    #... 

class Params(models.Model): 
    name = models.CharField(max_length=100) 
    config = FileEditorField(path='/path') 

FileEditor 읽기/파일 시스템에 /에서 값을 저장합니다.

가장 간단한 방법은 무엇입니까?

+0

무엇 [FileField와]에서 상속하는 약 (https://docs.djangoproject.com/en/dev/ref/models/fields/# filefield) 사용자 정의 동작으로 필요한 메서드를 덮어 씁니까? – danihp

+0

데이터베이스를 사용하지 않는 이유는 무엇입니까? 사용자 정의 ** 양식 ** 필드를 만들고 싶습니다. –

+0

John : 데이터베이스를 사용하고 있는데, 위의 예에서 admin 인터페이스에 일반 필드로 나타나기를 원합니다. 사실 나는 모델을 사용하여 이미 모든 작업을 수행했습니다 .Manager 서브 클래 싱 및 모델 저장 방법을 오버 라이딩하지만 접근 방식이 깨끗하지 않고 단순화 될 수 있습니다. –

답변

2

좋아요! 이것은 내가 생각했던 것보다 쉬웠다. 다음과 같은 아이디어는 새로운 사용자 정의 모델 필드 (docs)을 만드는 것이었다 :

class FileEditorField(models.TextField): 

    def __init__(self, *args, **kwargs): 
     self.path = kwargs.get('path', '/') 
     if 'path' in kwargs: kwargs.pop('path') 
     kwargs['null']=True 
     kwargs['blank']=True 
     return super(FileEditorField, self).__init__(*args, **kwargs) 

    def value_from_object(self, obj): 
     return open(self.path).read() 

    def save_form_data(self, instance, data): 
     f = open(self.path, 'wb') 
     f.write(data) 
관련 문제