Django管理员表单自定义选择

时间:2015-10-23 15:44:58

标签: python django django-admin

我正在学习如何使用Django 1.8管理站点。我创建了以下模型和模型管理类:

#models.py
class Car(models.Model):
    manufacturer = models.CharField(max_length=200)
    model = models.CharField(max_length=200)
    owner = models.CharField(max_length=200, null=True)

#admin.py
class CarAdmin(admin.ModelAdmin):
    list_display = ('manufacturer', 'model')
    exclude = ('owner',)  

问题是我的管理表单包含来自Car表的所有数据,但我想只显示所有者不为null的行。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

ModelAdmin类有一个.get_queryset()方法,您可以尝试编写自己的查询集:

#admin.py
class CarAdmin(admin.ModelAdmin):
    list_display = ('manufacturer', 'model')
    exclude = ('owner')

    def get_queryset(self, request):
        return Car.objects.exclude(owner=None)

答案 1 :(得分:1)

您可以覆盖模型管理类的get_queryset方法。

class CarAdmin(admin.ModelAdmin):
    list_display = ('manufacturer', 'model')
    exclude = ('owner',)  # note you need a comma to make this a tuple

    def get_queryset(self, request):
        qs = super(MyModelAdmin, self).get_queryset(request)
        return qs.objects.filter(owner__isnull=False)

请注意,更改此类查询集可能不是一个好主意 - 如果您稍后需要添加所有者,则无法在管理员中访问这些汽车。

相关问题