gpt4 book ai didi

python - Django admin 显示过滤器取决于其他过滤器

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:22 25 4
gpt4 key购买 nike

这里是模型的例子:

class Books(models.Model):
...

class Chapter(models.Model):
...
book = models.ForeignKey('Books')

class Exercise(models.Model):
...
book = models.ForeignKey('Books')
chapter = models.ForeignKey('Chapter')

下面是练习的 Admin 类:

class ExerciseAdmin(admin.ModelAdmin):
...
list_filter = (('book',admin.RelatedOnlyFieldListFilter),('chapter',admin.RelatedOnlyFieldListFilter))

admin.site.register(Exercise, ExerciseAdmin)

我现在有了exercise 的过滤器bookchapter。当我点击过滤器 book 中的 book 时,它会相应地显示所选 book 的所有 exercises .但是在过滤器chapter的列表中,它仍然显示所有books的所有chapters

有没有办法在过滤器 chapter 中只显示我在第一个过滤器中选择的 bookchapters ?怎么办?

最佳答案

我不确定这是否是最好的方法,但在这里我使用管理面板中 url 的 GET 参数来获取图书的 ID,然后我可以选择相应的章节。并且有效!

class ChapterFilter(admin.SimpleListFilter):
title = 'chapter'
parameter_name = 'chapter'
def lookups(self, request, model_admin):
if 'book__id__exact' in request.GET:
id = request.GET['book__id__exact']
chapters = set([c.chapter for c in model_admin.model.objects.all().filter(book=id)])
else:
chapters = set([c.chapter for c in model_admin.model.objects.all()])
return [(b.id, b.titre) for b in chapters]

def queryset(self, request, queryset):
if self.value():
return queryset.filter(chapter__id__exact=self.value())

class ExerciseAdmin(admin.ModelAdmin):
list_filter = (('book',admin.RelatedOnlyFieldListFilter), (ChapterFilter))

关于python - Django admin 显示过滤器取决于其他过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47163935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com