在我的Django模型中,Product
属于ProductCategory
class FinancialProduct(models.Model):
product_category = models.ForeignKey(ProductCategory, null=True)
我希望能够在幕后创建一个新的ProductCategory
,以便默认情况下它们不会出现在任何查询中。
这是Django admin和一个非常特定的其他查询的例外。
为此,我为Manager
创建了一个ProductCategory
:
class ProductCategoryManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(status=ProductCategory.STATUS_PUBLIC)
def get_complete_queryset(self):
return super().get_queryset()
然后在admin.py
中输入
@admin.register(FinancialProduct)
class ProductAdmin(admin.ModelAdmin):
model = Product
def get_queryset(self, request):
return Product.objects.get_complete_queryset()
通常这很好用,但是当我在Django admin上进入Product
并尝试添加隐藏的ProductCategory
时,找不到它:
product category instance with id 3 does not exist.
我是否应该继续尝试覆盖Django管理员使用的查询集,还是有更聪明的方法?理想情况下,我希望避免在所有地方都使用过滤器,因为这是人们忘记的那种事情。
注意:我实际上已经发现了文档do not recommend this approach