Reputation: 93
I modified my DjangoTables class to this
class Mark_Table(tables.Table):
teacher = tables.Column(accessor='id_subject.id_teacher.name')
group = tables.Column(accessor='id_student.id_group.name')
course = tables.Column(accessor='id_student.id_group.id_course.course')
curator = tables.Column(accessor='id_student.id_group.curator.name')
class Meta:
model = Mark
fields = ['id_student', 'id_subject','mark' ,'teacher', 'group', 'course', 'curator',]
attrs = {'class': 'paleblue'}
I have filters for it
class Mark_Filters(filters.FilterSet):
class Meta:
model = Mark
fields = '__all__'
but they work only for fields which are in model Mark. How can i add filters to another models, but in same view. I would like filters to this fields: Teacher. name, Group. name, Course. course, Curator. name, Is there any accessors for filters or something like this. didn`t find anything in DjangoFilters documentation. Thanks in advance
Upvotes: 1
Views: 625
Reputation: 93
I found the answer. Model choice filters and Model multiple choice filter can solve my problem. It will look like this.
class Mark_Filters(filters.FilterSet):
teacher_name = filters.ModelChoiceFilter(
name='id_subject_id__id_teacher__name',
to_field_name='name',
queryset=Teacher.objects.all(),
)
group_name = filters.ModelChoiceFilter(
name='id_student_id__id_group__name',
to_field_name='name',
queryset=Group.objects.all(),
)
course = filters.ModelMultipleChoiceFilter(
name='id_student_id__id_group__id_course__course',
to_field_name='course',
queryset=Course.objects.all(),
)
curator_name = filters.ModelChoiceFilter(
name='id_student_id__id_group__curator',
to_field_name='curator',
queryset=Group.objects.all(),
)
class Meta:
model = Mark
fields = ['teacher_name', 'id_student', 'id_subject', 'mark', 'course', 'curator_name',]
Upvotes: 1