의 선택을 수정하는 방법 :의 내가 어떤 인위적인 모델을 가지고 있다고 가정 해 봅시다 ModelMultipleChoiceField
class Author(Model):
name = CharField()
class Book(Model):
title = CharField()
author = ForeignKey(Author)
과의 내가 책에 대한 ModelForm를 사용하고 싶은 말은하자
class BookForm(ModelForm):
class Meta:
model = Book
간단한 지금까지. 그러나 데이터베이스에 저자가 많다고 말하면 많은 선택 필드를 갖고 싶지 않습니다. 그래서 BookForm의 ModelMultipleChoiceField 작성자 필드에서 쿼리 세트를 제한하는 것이 좋습니다. 전달하고자하는 쿼리에 의존하기 때문에 원하는 쿼리 세트가 __init__
까지 선택 될 수 없다고 가정 해 봅시다. 그건 그냥 내가 여기되지 않을 것 일 경우, 물론
class BookForm(ModelForm):
class Meta:
model = Book
def __init__(self, letter):
# returns the queryset based on the letter
choices = getChoices(letter)
self.author.queryset = choices
: 그것은 트릭을 할 수있는 것처럼
는이 보인다. 그게 나에게 AttributeError를 가져온다. 'BookForm'개체에 'author'속성이 없습니다. 같은 결과를
class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())
class Meta:
model = Book
def __init__(self, letter):
choices = getChoices(letter)
self.author.queryset = choices
: 그래서, 나 또한 내가 ModelForm의 기본 필드를 무시하고 나중에 그것을 설정하려고 이런 식으로 뭔가를 시도했다.
누구에게 어떻게 해야할지 알고 있습니까? 속성, 당신은 사전 인 "필드"속성에서 볼 필요로
예, 실제 문제 영역에는 수퍼 클래스 호출이 있지만이 예제에서는 건너 뛰었습니다. – Brian
충분합니다. 나는 이것을 참고로이 질문에 방황하는 사람들에게 맡기겠다. –
확실히. 필드에 액세스하기 전에 super() .__ init __()을 수행해야한다는 것을 알아야합니다. – Brian