【问题标题】:Overriding queryset for inline admin覆盖内联管理员的查询集
【发布时间】:2013-04-05 07:04:51
【问题描述】:

我在为我的内联管理员覆盖查询集时遇到了一些问题。

这是一个沼泽标准的父管理员和内联管理员:

class MyInlineAdmin(admin.TabularInline):
    model = MyInlineModel
    def queryset(self, request):
        qs = super(MyInlineAdmin, self).queryset(request)
        return qs

class ParentAdmin(admin.ModelAdmin):
    inlines = [MyInlineAdmin]
admin.site.register(ParentAdminModel, ParentAdmin)

现在我可以做qs.filter(user=request.user)qs.filter(date__gte=datetime.today()) 没问题。

但我需要的是 MyInlineModel 实例或 ParentAdminModel 实例(不是模型!),因为我需要根据它过滤我的查询集。

是否有可能在 queryset() 方法中获得类似 self.instance 或 obj 的内容(如在 get_readonly_fields() 或 get_formset() 中)?

希望这是有道理的。非常感谢任何帮助。

【问题讨论】:

标签: django django-admin django-forms


【解决方案1】:
class MyInlineAdmin(admin.TabularInline):
    model = MyInlineModel
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        """enable ordering drop-down alphabetically"""
        if db_field.name == 'car':
            kwargs['queryset'] = Car.objects.order_by("name") 
        return super(MyInlineAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

class ParentAdmin(admin.ModelAdmin):
    inlines = [MyInlineAdmin]

admin.site.register(ParentAdminModel, ParentAdmin)

我假设你的模型看起来像:

class MyInlineModel(models.Model):
    car=models.Foreignkey(Car)
    #blah

更多信息;在 formfield_for_foreignkey 上阅读 django 文档--> https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

【讨论】:

  • 这根本不起作用。 formfield_for_foreignkey 用于下拉和类似的小部件。请参阅this solution
猜你喜欢
  • 2011-05-08
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 2014-11-04
  • 1970-01-01
  • 2019-07-09
相关资源
最近更新 更多