Допустим, у меня есть несколько надуманных моделей:
class Author(Model):
name = CharField()
class Book(Model):
title = CharField()
author = ForeignKey(Author)
И скажем, я хочу использовать ModelForm для Книги:
class BookForm(ModelForm):
class Meta:
model = Book
Пока все просто. Но давайте также скажем, что у меня есть тонна авторов в моей базе данных, и я не хочу иметь такое длинное поле множественного выбора. Итак, я хотел бы ограничить набор запросов в поле автора BookMorm 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'. Итак, я также попытался что-то вроде этого, где я пытаюсь переопределить поле по умолчанию ModelForm, а затем установить его позже:
class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())
class Meta:
model = Book
def __init__(self, letter):
choices = getChoices(letter)
self.author.queryset = choices
Который дает тот же результат.
Кто-нибудь знает, как это должно быть сделано?