Как сделать Django Chained Select в Forms.py?
class Library(forms.ModelForm):
author = forms.ChoiceField(
widget = forms.Select(),
choices = ([
('Jk Rowling','Jk Rowling'),
('agatha christie','agatha christie'),
('mark twain','mark twain'),
]),
initial = '1',
required = True,
)
books = forms.ChoiceField(
widget = forms.Select(),
choices = ([
('Harry Potter 1','Harry Potter 1'), # 1
('Harry Potter 2','Harry Potter 2'), # 2
('Harry Potter 3','Harry Potter 3'), # 3
('Harry Potter 4','Harry Potter 4'), # 4
('The A.B.C. Murders','The A.B.C. Murders'), # 5
('Dumb Witness','Dumb Witness'), # 6
('Death on the Nile','Death on the Nile'), # 7
('Murder Is Easy','Murder Is Easy'), # 8
('Roughing It','Roughing It'), # 9
(' The Gilded Age ',' The Gilded Age '), # 10
('Adventures of Tom Sawyer','Adventures of Tom Sawyer'), # 11
]),
initial = '1',
required = True,
)
Если пользователь выбрал автора в качестве Jk Rowling, в поле выбора книг должна быть указана серия Гарри Поттера (от 1 до 4 вариантов)
Если пользователь выбрал автора в качестве Агаты Кристи, то в поле выбора книг должны быть указаны только (от 5 до 8)
Если Пользователь выбирает автора как Марка Твена, то в виджете выбора поля выбора книг должен быть выбран только вариант (от 8 до 11).
Я хочу, чтобы отфильтровать выбор может кто-нибудь помочь?
1 ответ
Решение
Держать author
а также books
в БД.
models.py
Class Author(models.Model):
name = models.CharField(max_length=50)
......
class Books(models.Model):
....
author = models.ForeignField(Author)
....
Class Library(models.Model):
.....
author = models.ForeignKey(Author)
books = models.ForeignKey(Books)
.....
forms.py
class Library(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(Library, self).__init__(*args, **kwargs)
self.fields['author'].choices = list(Author.objects.values_list('id', 'name'))
self.fields['books'].choices = list(Books.objects.values_list('id', 'name'))
class Meta:
Model: Library
На основе Author
выбор, вызвать из вызова AJAX и получить все соответствующие books
,