피클 링 된 일련의 문자열이있는 모델이 있습니다. (장고 세트 필드에 내장 더 있기 때문에 그것은 바로, 절인 할 수 없습니다?)장고 관리 인터페이스와 피클 세트
class Foo(models.Model):
__bar = models.TextField(default=lambda: cPickle.dumps(set()), primary_key=True)
def get_bar(self):
return cPickle.loads(str(self.__bar))
def set_bar(self, values):
self.__bar = cPickle.dumps(values)
bar = property(get_bar, set_bar)
내가 세트가 관리 인터페이스에서 편집 할 수 싶습니다. 분명히 사용자는 절인 문자열을 직접 사용하지 않을 것입니다. 또한 인터페이스에는 세트에서 문자열을 추가/제거하기위한 위젯이 필요합니다.
이렇게하는 가장 좋은 방법은 무엇입니까? 나는 장고의 관리자 시스템에 익숙하지 않다. 맞춤 관리자 위젯이나 다른 것을 만들 필요가 있습니까?
업데이트 : 나는 사용자 정의 위젯을해야하는 경우,이 도움이 보인다 : http://www.fictitiousnonsense.com/archives/22
업데이트 2은 : 지금은 문제가 해결되는지 확인하기 위해 다른 관계형 모델을 찾고 있어요. 내가 놀겠다는 거있어 하나 개의 아이디어 :이의
class FooMember(models.Model):
name = models.CharField(max_length=120)
foo = models.ForeignKey('Foo')
class Foo(models.Model):
def get_names(self):
return FooMember.objects.filter(foo__exact=self)
단점은 다음과 같습니다 그것은 하나 개의 데이터 필드 (name
)에 대한 전체 모델을 만들기 위해 과도한 느낌
- .
Foo
에 대한 관리 인터페이스에서 사용자가 문자열 목록을 입력 할 수있게하고 싶습니다. 나는이 설정으로 어떻게 할 지 모르겠다. 사용자 정의 양식 위젯을 만드는 것이 덜 효과적 인 것처럼 보입니다.
ManyToManyField는 세트와 유사합니다. 문자열을 다른 모델의 'unique = True' 필드로 만들고 Foo에 해당 모델의 ManyToManyField를 포함시킬 수 있습니까? –
"하나의 데이터 필드 (이름)에 대해 전체 모델을 작성하는 것이 과도하다고 느낍니다."- 이런 식으로 느끼지만 데이터베이스 테이블의 행에 불과합니다. – osa