gpt4 book ai didi

django - AutocompleteFilter 自递归外键过滤查询所有父级

转载 作者:行者123 更新时间:2023-12-05 05:43:57 25 4
gpt4 key购买 nike

我不想按父类别对类别进行筛选,我使用一个模型并将其链接到自身的父类别。
模型:

class Category(models.Model):
name = models.CharField(max_length=100)
parent = models.ForeignKey(
"self", on_delete=models.CASCADE, null=True, blank=True, related_name="childs"
)
description = models.TextField(null=True, blank=True)
is_adult = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)

admin.py 中:

class ParentCategoryFilter(AutocompleteFilter):
title = "By parent category"
field_name = "parent"
autocomplete_url = "parent-category-autocomplete"
is_placeholder_title = True


class CategoryAdmin(admin.ModelAdmin):
search_fields = ["name"]
autocomplete_fields = ["parent"]
fieldsets = (
(
_("Details"),
{
"fields": (
"name",
"parent",
"description",
),
},
),
)
list_display = (
"name",
"parent",
)
list_filter = [ParentCategoryFilter]


admin.site.register(Category, CategoryAdmin)

以及定义了 ParentCategoryFilter 的 views.py:

class ParentCategoryAutocompleteView(autocomplete.Select2QuerySetView):
permissions = [
"CategoryView",
]

def get_queryset(self):
qs = Category.objects.filter(parent__isnull=True)
if self.q:
qs = qs.filter(Q(name__istartswith=self.q))
return qs

View 的 url 是:

urlpatterns = [
url(
"^/autocomplete",

staff_permission_required(ParentCategoryAutocompleteView.permissions)(
ParentCategoryAutocompleteView.as_view()
),
name="parent-category-autocomplete",
),

我遇到的问题是在过滤器中我得到了 child 的类别名称。我不知道它有什么问题。 enter image description here

最佳答案

如果您没有在其他任何地方使用、调用或表示类别模型对象默认名称。一个简单的修改是向模型添加默认字符串名称。

class Category(models.Model):
name = models.CharField(max_length=100)
parent = models.ForeignKey(
"self", on_delete=models.CASCADE, null=True, blank=True, related_name="childs"
)
description = models.TextField(null=True, blank=True)
is_adult = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)

def __str__(self):
if self.parent != None:
return self.parent.name
else:
return self.name

这是一个快速而肮脏的解决方案。如果您无法使用此解决方案,我会进一步调查。

关于django - AutocompleteFilter 自递归外键过滤查询所有父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71711081/

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